پروژهی اولیه را از این لینک دانلود کنید. ساختار فایلهای این پروژه به صورت زیر است.
ظاهر کلی برنامه بهاین صورت است:
فرض کنید که میخواهیم برای صفحهی اصلی وبسایت یک اسلایدر یا نمایشدهندهی محصول ایجاد کنیم. این اسلایدر باید در لحظه از بین محصولات یک محصول را به صورت تصادفی به کاربر نمایش دهد.
script.js
: موارد خواسته شده باید در این فایل قرار داده شوند.script.js
هستید.script.js
ارسال کنید.پروژهی اولیه را از این لینک دانلود کنید. ساختار فایلهای این پروژه به صورت زیر است.
ظاهر کلی برنامه بهاین صورت است:
در این سوال میخواهیم یک بازی طراحی کنیم تا خلبان بتواند با کمک آن، توانایی بینایی خود را به چالش بکشد.
طراحی این بازی اینگونه است که یک رنگ به عنوان صورت سوال و چهار رنگ هم به عنوان گزینهها قرار میگیرند. حال خلبان باید با استفاده از کشیدن رنگها و رهاسازی آنها در بخشهای darker
و lighter
، مشخص کند که کدام رنگها تیرهتر و کدام رنگها روشنتر از رنگ اصلی یا همان رنگ سوال میباشند.
.optionsBox
دایرههای رنگی را بکشد (drag) و در بخش .lighterBox
یا .darkerBox
رها کند (drop)..lighterBox
و .darkerBox
جابهجا کند. (عمل drag and drop).lighterBox
و .darkerBox
به قسمت .optionsBox
وجود ندارد..lighterBox
و .darkerBox
قرار داد، دکمه ثبت باید فعال شود.handleDragAndDrop
را تکمیل کنید.answerBoxes
قرار داده شده است.script.js
: موارد خواستهشده باید در این فایل قرار داده شوند.script.js
هستید.script.js
ارسال کنید.پروژهی اولیه را از این لینک دانلود کنید. ساختار فایلهای این پروژه به صورت زیر است.
برای اجرای پروژه، باید 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
ارسال کنید.پروژهی اولیه را از این لینک دانلود کنید. ساختار فایلهای این پروژه به صورت زیر است.
برای اجرای پروژه، باید NodeJS
و npm
را از قبل نصب کرده باشید.
pindo
، دستور npm install
را برای نصب نیازمندیها اجرا کنید.npm start
را برای راهاندازی پروژه اجرا کنید.http://localhost:3000/
میتوانید نتیجه را ببینید.ظاهر کلی برنامه بهاین صورت است:
یکی از قسمتهای اصلی پروژه پیندو ایجاد آگهی است. کاربران در دستهبندیهای مختلفی میتوانند برای کالای خود آگهی ایجاد کنند. برای مثال فرم ایجاد آگهی برای گوشی موبایل با ظروف آشپزخانه متفاوت است. به همین جهت فرم ایجاد آگهی باید به صورت داینامیک باشد. در این سوال از شما میخواهیم این فرمهای داینامیک را بسازید.
اِلِمانهای فرم در یک آرایه قرار دارد. ساختار این آرایه به شکل زیر است:
این فیلد نشاندهندهی نوع اِلمان است.
هر المان فرم میتواند یکی از مقادیر type زیر را داشته باشد:
این فیلد نشان میدهد که آیا تکمیل این المان اجباری خواهد بود یا خیر.
درصورتی که این فیلد true
باشد، کاربر باید حتما برای این فیلد مقداری را وارد کند.
این فیلد میتواند خالی باشد و این به معنای غیراجباری بودن این فیلد است.
این فیلد نشاندهندهی کلید اصلی آن المان است. در هنگام ساخت دادههای ورودی کاربر، مقدار کلید برابر این فیلد است.
این فیلد مشخصکنندهی برچسب (لیبل) المان است.
در صورتی که type یک المان برابر FormType.DROPDOWN باشد، مقادیری قابل انتخاب در فرم select در این فیلد قرار میگیرد.
هر المان میتواند به المان دیگری وابستگی داشته باشد. این موضوع در این فیلد مشخص میشود. در صورتی که این فیلد وجود نداشت، به این معنا است که این فیلد به فیلد دیگری وابستگی ندارد. وابستگی به دو شکل وجود دارد:
هر کدام از این وابستگیها به شکل زیر مشخص میشوند:
که name نشاندهندهی فیلدی است که به آن وابسته است و value نشاندهندهی شرط وابستگی است. در صورتی که مقدار فیلد name برابر value بود، شرط وابستگی برقرار است.
برای مثال در دادهی زیر فیلد productIssues به فیلد productStatus وابسته است.
در صورتی که مقدار انتخابی در productStatus برابر 4 باشد (یعنی مقدار انتخابی خراب باشد)،
این فیلد باید (productIssues) نمایش داده شود.
همچنین اجباریبودن فیلد city به مقدار فیلد delivery بستگی دارد و مقدار این فیلد باید true
باشد.
دقت کنید این فیلد باید نمایش داده شود ولی اجباریبودن آن به فیلد دیگری بستگی دارد.
onSubmit
پاس داده شود. (این تابع به شکل prop به کامپوننت داده میشود)undefiend
به تابع onSubmit
فرستاده شود.App.jsx
: منطق اصلی کد شما در این فایل قرار میگیرد.
در این فایل شما props را بهعنوان ورودی میگیرید.FormItem.jsx
: در این کامپوننت شما براساس type هر المان باید از یکی کامپوننتهای آورده شده،
استفاده کنید.شما لازم است براساس هر آیتم در fields از این کامپوننت استفاده کنید.
App.jsx
و FormItem.jsx
و package.json
هستید.پروژه اولیه را از این لینک دانلود کنید. ساختار فایلهای این پروژه به صورت زیر است.
برای اجرای پروژه، باید NodeJS
و npm
را از قبل نصب کرده باشید.
nested-comments
، دستور npm install
را برای نصب نیازمندیها اجرا کنید.npm start
را برای راهاندازی پروژه اجرا کنید.http://localhost:3000/
میتوانید نتیجه را ببینید.ظاهر کلی برنامه بدین صورت است:
در این سوال میخواهیم لیست کامنتها را بهصورت درختی نمایش دهیم.
لیست کامنتها در پوشه data
وجود دارد. ساختار هر کامنت به شکل زیر است:
در این ساختار هر کامنت دارای یک parentId است. اگر مقدار این فیلد null
باشد به این معنا است که این کامنت دارای والد نیست.
در غیر این صورت به ایدی والد این کامنت اشاره میکند.
برای مثال لیست کامنتها به شکل زیر است:
این لیست باید به شکل زیر نشان داده شود:
در شکل بالا کامنتهای id-1 و id-4 سطح صفر، id-2 و id-5 سطح یک و کامنت id-3 سطح دو هستند.
margin-left
باشد.
برای مثال اگر کامنت در سطح صفر بود (یعنی والد است و والدی ندارد) باید دارای استایل margin-left: 0px
باشد.
اگر کامنت در سطح یک بود (دارای والد است) باید دارای استایل margin-left: 16px
باشد.
اگر کامنت در سطح دو بود (دارای والد است و والد آن خود والد دارد) باید دارای استایل margin-left: 32px
باشد.root-comment
باشد.EmptyList
نمایش داده شود.App.jsx
: شما لیست کامنتها را در کامپوننت دریافت میکنید. قبل از فرستادن comments
به کامپوننت CommentList
باید ساختار مورد نظر را ایجاد کنید.CommentList.jsx
: در این کامپوننت شما باید لیست کامنتها را نمایش دهید. کلاس root-comment
را برساس شرایط گفته شده در قسمت گفته شده قرار دهید.
شما باید کامنت سطح صفر بههمراه فرزندانش را در اینجا نشان دهید. در صورتی که فرزندی نداشت چیزی نباید نشان دهید.CommentBox.jsx
: برای نمایش هر کامنت از این کامپوننت استفاده کنید. استایل margin-left
و شرایط گفته شده باید در اینجا پیادهسازی شود.App.jsx
و CommentList.jsx
و CommentBox.jsx
هستید.data-testid
پروژه اولیه نباید تغییر کنند.comment-box
داخل فایل CommentBox.jsx
داده شود.