لینکهای مفید برای شرکت در مسابقه:
در زمان مسابقه میتوانید سوالهای خود را از قسمت "سوال بپرسید" مطرح کنید.
پروژهی اولیه را از این لینک دانلود کنید. ساختار فایلهای این پروژه به صورت زیر است.
برای اجرای پروژه، باید NodeJS
و npm
را از قبل نصب کرده باشید.
use-page-data
، دستور npm install
را برای نصب نیازمندیها اجرا کنید.npm start
را برای راهاندازی پروژه اجرا کنید.http://localhost:3000/
میتوانید نتیجه را ببینید.ظاهر کلی برنامه بهاین صورت است:
از آنجایی که تعداد محصولات دیجیکالا در حال زیاد شدن است، ساخت Custom Hook
به یک بخش جدانشدنی از پروژهها تبدیل شده است.
ساختار api ها در دیجیکالا در تمام پروژهها رعایت شده است.
این موضوع باعث میشود ساخت یک Custom Hook برای ارسال درخواستها به سرور
بسیار مفید باشد.
در این سوال از شما میخواهیم یک Custom Hook به این منظور پیادهسازی کنید.
این هوک باید ورودیهای زیر را دریافت کند:
url
: این پارامتر آدرس api را مشخص میکند. بهعبارتی دیگر شما باید به این آدرس درخواست را ارسال کنید.fireOnLoad
: این پارامتر مشخص میکند که آیا درخواست در هنگام ایجاد کامپوننت (mount) ارسال شود یا خیر.successCallback
: این پارامتر یک callback function ،است و درصورتی که درخواست با موفقیت تمام شد باید صدا زده شود. پارامتر ورودی این تابع، پاسخ سرور است.failedCallback
: این پارامتر یک callback function است و درصورتی که درخواست ناموفق بود، باید صدا زده شود.خروجی هوک باید به شکل زیر باشد:
pending
: نشاندهندهی آن است که درخواست به سرور فرستاده شده است ولی هنوز پاسخی از سرور دریافت نشده است.hasError
: نشاندهندهی ناموفق بودن درخواست ارسالی است.request
: یک تابع async برای ارسال درخواست است.
این تابع بخش اصلی هوک است.
در صورت موفقبودن درخواست این تابع باید پاسخ را برگرداند (resolve).
این تابع را میتوان به صورت جداگانه نیز صدا کرد.data
: پاسخ سرور در این فیلد قرار داده میشود.همچنین این هوک باید قابلیت کشکردن درخواستها را درصورت موفقیتآمیز بودن ریکوئست داشته باشد؛ بهاینصورت که برای هر url وضعیت درخواست را ذخیره کند و در درخواستهای بعدی به آن url از کش بخواند و درخواست جدیدی ارسال نکند. بهعنوان مثال اگر هوک در چند جای مختلف استفاده شود یا اگر متد request چند بار برای یک url فراخوانی شود تنها یک ریکوئست به url داده شده زده میشود و پاسخ سرور برای بقیه ریکوئستها با url یکسان استفاده میگردد. ساختار کش را میتوانید هرطور که خواستید پیاده سازی کنید به طور مثال این ساختار میتواند برای هر url به شکل زیر باشد:
fireOnLoad
برابر true
باشد، باید تابع request در هنگام mount شدن کامپوننت صدا زده شود.
usePageData.js
: موارد خواسته شده باید در این فایل قرار داده شوند.
usePageData.js
هستید.usePageData.js
ارسال کنید.