مهارتهای لازم:
map
، filter
و reduce
ظاهر کلی برنامه بدین صورت است:
پروژه اولیه را از اینجا دانلود کنید. ساختار فایلهای این پروژه به صورت زیر است.
برای اجرای پروژه، باید NodeJS
و npm
را از قبل نصب کرده باشید.
read-json
، دستور npm install
را برای نصب نیازمندیها اجرا کنید.npm start
را برای راهاندازی پروژه اجرا کنید.http://localhost:3000/
میتوانید نتیجه را ببینید.دادههای کاربر در فایل users.json
به این صورت هستند:
name
: اسم کاربرage
: سن کاربرrole
: نقش کاربر که میتواند user
یا admin
باشد.در این سوال شما باید ابتدا لیست کاربران را از فایل users.json
بخوانید و سپس کاربرانی که دارای نقش user
هستند را با استفاده از کامپوننت UserItem
نمایش دهید و میانگین سنی کاربرانی که دارای نقش admin
هستند را بدست آورید و با استفاده از کامپوننت AverageAge
نشان دهید.
UserList.js
هستید.node_modules
در فایل ارسالی نباشد.مهارتهای لازم:
hook
ظاهر کلی برنامه بدین صورت است:
پروژه اولیه را از اینجا دانلود کنید. ساختار فایلهای این پروژه به صورت زیر است.
برای اجرای پروژه، باید NodeJS
و npm
را از قبل نصب کرده باشید.
timer-hook
، دستور npm install
را برای نصب نیازمندیها اجرا کنید.npm start
را برای راهاندازی پروژه اجرا کنید.http://localhost:3000/
میتوانید نتیجه را ببینید.در این سوال شما باید یک hook
بسازید که یک تایمر را کنترل کند. این هوک باید قابلیتهای شروع، ادامه و ریست
داشته باشد.
هوک ساخته شده باید چهار خروجی داشته باشد:
seconds
: ثانیه که الان در آن هستیم، از صفر شروع میشود و هر ثانیه یک واحد افزایش مییابد.stop
: تابعی که باعث میشود تایمر متوقف شود.resume
: تابعی که باعث میشود تایمر ادامه پیدا کند.reset
: تابعی که تایمر را به حالت اولیه یعنی شروع از صفر میبرد.use-timer.js
هستید.node_modules
در فایل ارسالی نباشد.مهارتهای لازم:
React
Error Handling in React 16
ریاکت ۱۶ یک استراتژی جدید را برای مواجهه با خطاهایی که ممکن است رخ بدهد، معرفی کرده است.
با استفاده از این استراتژی میتوان از موقعیتهایی که خطایی در داخل یک فرایند رندر کردن باعث بروز یک State غیر معتبر و در نتیجه رفتار تعریف نشده و خطاهای گیج کننده میشود جلوگیری کرد.
برای مطالعه بیشتر به اینجا مراجعه کنید.
در این سؤال از شما میخواهیم کد پروژه را به گونهای تغییر دهید که در صورت رخ دادن خطا، اپلیکیشن به کار خود ادامه دهد.
پروژه اولیه را از اینجا دانلود کنید. ساختار فایلهای این پروژه به صورت زیر است:
برای اجرای پروژه، باید NodeJS
و npm
را از قبل نصب کرده باشید.
errors-boundary
، دستور npm install
را برای نصب نیازمندیها اجرا کنید.npm start
را برای راهاندازی پروژه اجرا کنید.http://localhost:3000/
میتوانید نتیجه را ببینید.ساختار state فایل App.js
به صورت زیر است
در صورت وارد کردن مقدار در input
، مقدار آن در state.person.year
ذخیره میشود.
در صورت وارد کردن مقدار غیر عددی person
، خطایی اتفاق می افتد ولی برنامه به کار خود ادامه میدهد و محتویات فایل Error.js
را نمایش میدهد. error
مورد نظر باید در state.error
ذخیره شود؛
همچنین در صورت کلیک بر روی دکمه "بارگذاری مجدد" برنامه باید به حالت اولیه خود برگردد.
App.js
و ErrorBoundary.js
هستید.در این سؤال باید یک مسابقه چند سوالی طراحی کنید؛ به این صورت که کاربر با هر بار پاسخ دادن به یک سوال، به سوال بعدی میرود و در نهایت امتیاز نهایی که کسب کرده، به او نشان داده میشود.
پروژه اولیه را از اینجا دانلود کنید. ساختار فایلهای این پروژه به صورت زیر است.
برای اجرای پروژه، باید NodeJS
و npm
را از قبل نصب کرده باشید.
errors-boundary
، دستور npm install
را برای نصب نیازمندیها اجرا کنید.npm start
را برای راهاندازی پروژه اجرا کنید.http://localhost:3000/
میتوانید نتیجه را ببینید.طراحی Redux به صورت زیر است:
quiz
questions
: آرایهای از سوالات که شامل موارد زیر است:options
: آرایهای از گزینههای یک سوال که دارای یک کلید و متن گزینه میباشد.answerKey
: کلید پاسخ صحیحscore
: امتیاز سوالlevel
currentLevel
: مرحله جاریisFinished
: نشان دهنده اتمام بازیlevels
: تعداد مراحل بازیperson
score
: امتیاز بازیکنrightAnswers
: تعداد پاسخ صحیحwrongAnswers
: تعداد پاسخ اشتباهnoAnswers
: تعداد سوالات بیپاسخquestion.js
،level.js
، person.js
و quiz.js
هستید.مهارتهای لازم:
ReactJS
Bootstrap
پروژه اولیه را از اینجا دانلود کنید.
ساختار فایلهای این پروژه به صورت زیر است.
برای اجرای پروژه، باید NodeJS
و npm
را از قبل نصب کرده باشید.
fifabaz
، دستور npm install
را برای نصب نیازمندیها اجرا کنید.npm start
را برای راهاندازی پروژه اجرا کنید.http://localhost:3000/
میتوانید نتیجه را ببینید.در این پروژه ما میخواهیم ۲۰۰ بازیکن برتر بازی FIFA 20 را در قالب یک جدول نمایش دهیم و کاربر باید بتواند بازیکنان را براساس ویژگیهای آنها فیلتر یا مرتب کند.
دیتاسِت مربوط به بازیکنان از سایت kaggle.com
، گرفته شده و در مسیر data/Players.js
قرار داده شده است.
شما باید این اطلاعات را بخوانید و سپس براساس فیلترها و گزینه مرتبسازی که کاربر انتخاب کرده است آنها را در یک جدول نمایش دهید.
شکل کلی پروژه به صورت زیر میباشد:
اطلاعات بازیکنان در این فایل به صورت زیر میباشد:
در این پروژه چهار کامپوننت تعریف شده که شما باید هر یک از آنها را با توجه به قابلیتی که باید داشته باشد تغییر دهید.
App.js
در این کامپوننت شما باید state
مورد نیاز پروژه را تعریف کنید. خواندن از فایل Players.js
در این بخش انجام میشود.
سه تابع در این فایل وجود دارد که شما باید آنها را براساس نیاز گفته شده تغییر دهید.
تابع changeSort(_selectedSort)
: این تابع وظیفه تغییر نحوه مرتب شدن جدول را دارد. پس از انتخاب یکی از موارد مرتب سازی این تابع باید فراخوانی شود.
تابع changeFilters
: این تابع وظیفه تغییر وضعیت نحوه فیلتر شدن دیتای جدول را دارد. پس از انتخاب فیلترها این تابع باید فراخوانی شود.
تابع renderTable
: این تابع وظیفه نمایش جدول را دارد. پس از هر تغییر در نحوه مرتب سازی یا فیلتر کردن این تابع جدول بروزرسانی شده را نمایش میدهد.
Table.js
در این کامپوننت شما باید ابتدا thead
جدول را براساس متغیر fields
که در کامپوننت وجود دارد بسازید؛ سپس اطلاعات بازیکنان را در قسمت tbody
جدول نشان دهید.
SortBox.js
در این کامپوننت شما باید دکمههای مربوط به نحوه مرتب کردن جدول را بسازید. هر دکمه سه وضعیت دارد.
۱- غیرفعال: (در این حالت بازیکنان بدون تغییر و به صورت مرتب شده اولیه (براساس overall) نمایش داده میشود.)
۲- مرتب نزولی
۳- مرتب صعودی
کاربر میتواند روی هرکدام کلیک کند و وضعیت دکمه را تغییر دهد. حالت اولیه دکمه، غیرفعال است و پس کلیک بر روی آن دکمه به حالت مرتب نزولی میرود و دیتای جدول براساس آن فیلد به صورت نزولی مرتب میشود. پس از کلیک دوباره دیتای جدول براساس آن فیلد و این بار صعودی مرتب میشود و درنهایت پس از کلیک سوم، دکمه به حالت اولیه رفته و دیتا به همان شکل اولیه مرتب میشود.
هرکدام از حالات دارای یک کلاس html منحصر به فرد است که باید پیاده سازی شود.
براساس هر وضعیت که دکمه دارد یک کلاس منحصر به فرد به آن دکمه داده میشود. توضیح این کلاسها در خود کامپوننت داده شده است.
این کامپوننت دو تابع ناقص دارد که شما باید آنها را تکمیل کنید.
تابع changeSelectedSort
: این تابع وظیفه تغییر نحوه مرتب شدن را دارد. وقتی دکمهای کلیک شد، این تابع فراخوانی میشود و بر اساس فیلد مرتبسازی و وضعیت آن دکمه، اطلاعات جدول تغییر میکند.
تابع setClassName
: این تابع وظیفه نامگذاری کلاس دکمهها براساس وضعیت آن دکمه را دارد.
نکات
دکمههای این کامپوننت باید دارای id
به شکل sort-btn-FIELD_NAME
باشند، که FIELD_NAME
از متغیر fields
در این کامپوننت خوانده میشود.
شما باید کلاسهای گفته شده را به کلاسهای اولیه این دکمهها اضافه کنید.
مرتبسازی براساس نام نباید به حروف کوچک و بزرگ حساس باشد.
FilterBox.js
در این کامپوننت ابتدا دیتا را از پوشه data
بخوانید و سپس براساس متغیر filters
آنها را نمایش دهید.
برای نمایش این قسمت، لازم است با نحوه عملکرد Accordion
از کتابخانه bootstrap
آشنایی داشته باشد.
برای آشنایی با این قسمت میتوانید به این لینک مراجعه کنید.
این کامپوننت یک تابع ناقص دارد که باید آن را تکمیل کنید.
changeFilter
: این تابع وظیفه تغییر نحوه فیلتر شدن را دارد.توجه کنید که کاربر میتواند چند فیلتر را همزمان انتخاب کند. برای مثل هم گزینه Spain
از بخش nationallity
و هم گزینه FC Barcelona
از بخش club
را انتخاب کند.
نکات
دکمه باز بسته کننده Accordion
باید دارای id
به شکل btn-FILTER_NAME-collapse
باشد که FILTER_NAME
از متغیر filters
که در این کاپوننت وجود دارد خوانده میشود.
شما باید div
هایی که id
ای به یکی از سه شکل collapseOne
, collapseTwo
, collapseThree
دارند را به شکل collapse-FILTER_NAME
در بیاورید و تغییرات لازم را در کامپوننت ایجاد کنید.
برای بخش checkbox
ها باید از bootstrap
کمک بگیرید و به همان شکلی که در داکیومنت این کتابخانه وجود دارد عمل کنید. برای اطلاعات بیشتر میتواند به لینک مراجعه کنید.
checkbox
های این قسمت باید دارای id
به شکل FILTER_TYPE-ITEM_NAME
باشند. مانند nationality-Egypt
برای تغییر checkbox
از event
onChange
استفاده شود.
قسمت nationality
در ابتدای اجرای پروژه باید باز باشد و در هر لحظه فقط یک قسمت از Accordion
باید باز است.
attributes
و اطلاعات توضیح داده شده در هر کامپوننت توجه شود.render
شدن کامپوننتها و جدول دارای اهمیت میباشد.containers
، components
هستید.node_modules
در فایل ارسالی نباشد.