قبل از ارسال میتوانید با اجرای دستوری npm test
برنامه خود را با تستهای نمونه تعبیه شده بررسی کنید.
برای اجرای برنامهها درون گوشی خود کافی است اپلیکیشن مربوطه یعنی Expo Go
را نصب کرده و پس از اجرای دستور npm start
با اسکن کردن QRCode نمایش داده شده آن را اجرا نمایید.
در صورتی که برنامه Expo Go
بر روی گوشیتان اجرا نشد از بخش تنظیمات قسمت App
این برنامه را پیدا کرده در ابتدا آن را Force Stop
و سپس فقط Data
آن را پاک نمایید و همچنین از خاموش بودن VPN خود اطمینان حاصل نمایید.
پروژه اولیه را از این لینک دانلود کنید. ساختار فایلهای این پروژه به صورت زیر است.
todo_list_simple_mobile
، دستور npm install
را برای نصب نیازمندیها اجرا کنید.npm start
را برای راهاندازی پروژه اجرا کنید.node server
درون پوشه پروژه اجرا نمایید:src/API/index.js
در مقدار متغیر IP
ذخیره نمایید.URL
استفاده کنید برای مثال:پس از افزایش محبوبیت تیشرتهای برنامه نویسی کوئرا که به مناسبت رویدادهای برنامه نویسی مختلف به دست شرکت کنندگان مسابقات میرسید حال کوئرا تصمیم گرفته برنامه فروشگاه مرچنت (Merchant Shop) خود را راه بیاندازد. در همین اول کار آنها با چالش مواجه شده اند و از شما درخواست کمک کردهاند. این برنامه باید محصولات موجود را از یک API دریافت نماید و به کاربر آنها در قالب یک لیست قابل اسکرول شدن نمایش دهد. به علاوه کاربر باید بتواند در یک صفحه مجزا لیست سبد خرید خود را مشاهد نماید. به همین جهت پس از مشاوره کوئرا با مهیار آنها به یک معماری مناسب و ساده برای این کار دست پیدا کردند که به شرح زیر است:
Context/index.js
🔗در این فایل شما باید یک Context جهت مدیریت استیتهای سبد خرید یا همان Shopping Cart را پیاده سازی کتید که موارد مورد نیاز آن به شرح زیر است:
useCartContext
🔗این هوک باید مقادیری که درون Context وجود دارد را برای کامپوننتی که به عنوان فرزند این Context قرار دارد تدارک ببینید.
CartProvider
🔗این هوک یک Wrapper کاربردی جهت مدیریت استیتها و پاس دادن متغیرها و توابع ضروری میباشد. در گام اول این کامپوننت باید یک درخواست از نوع GET به آدرس زیر ارسال نماید و در صورتی که کاربر از قبل سبد خریدی داشت آن را درون استیت مناسب خود ذخیره نماید که نمونه پاسخ آن را میتوانید در بلوک زیر مشاهده نمایید:
همچنین این کامپونن باید مقادیر و توابع زیر را تدارک دهد:
addCart
که برای اضافه کردن یک محصول به سبد خرید کاربر استفاده میشود. هر محصول در قالب یک آبجکت به این تابع پاس داده میشود که مشخصات آن محصول به شرح زیر است:id
name
price
در صورتی که این محصول در سبد خرید وجود نداشت کلید مربوط به count
را برابر یک قرار دهد و در صورتی که در سبد خرید موجود بود به تعداد آن یکی اضافه کند.
increaseItem
که با گرفتن شناسه محصول یک عدد به تعداد آن یعنی count
اضافه کند.decreaseItem
که با گرفتن شناسه محصول یک عدد از تعداد آن یعنی count
کم میکند و در صورتی که مقدار آن برابر صفر شد آن را از سبد خرید حذف کند.removeItem
که با گرفتن شناسه محصول آن را از سبد خرید حذف میکند.getTotal
که قیمت کل محصولات موجود در سبد خرید را محاسبه و برمیگرداند.checkOut
که سبد خرید کاربر را به آدرس /cart
به صورت POST ارسال میکند و سپس سبد خرید کاربر را خالی میکند.
تمامی موارد زیر باید در قالب یک شی تدارک دیده شوند.src/Pages/Shop.jsx
🔗در این صفحه باید لیست محصولات موجود در فروشگاه را ابتدا از API دریافت نماید و باید با استفاده از کامپوننت <ListRenderer />
و <ShopItem />
به نحو مطلوب نمایش دهد
src/Components/ShopItem
🔗این کامپوننت با دریافت نام، شناسه و قیمت محصول به همراه مقادیر مربوط به استیت منیجر cart
در قالب پراپس موارد زیر را پیاده کند:
برخی از موارد در این بخش پیاده سازی شده است و شما باید باقی بخشهای ناقص را پیاده سازی کنید.
src/Pages/Cart.jsx
🔗این کامپوننت وظیفه نمایش محصولات موجود در سبد خرید کاربر را بر عهده دارد که و باید با استفاده از کامپوننت <ListRenderer />
و <CartItem/>
در صورتی که سبد خرید خالی نبود به نحو مطلوب نمایش دهد. این کامپوننت باید موارد زیر را پیاده سازی نماید.
یک متن شامل قیمت کل محصول را به صورت زیر برای مثال نمایش دهد:
و یک دکمه با متن Checkout که در صورتی که بر روی آن کلیک شد سبد خرید کاربر با تابع مناسب موجود در Context پردازش کند.
در صورتی که سبد خرید از ابتدا خالی بود پیغام MESSAGES.EMPTY
را به کاربر نمایش دهد
در صورتی که بر اثر Checkout شدن خالی شده بود پیغام MESSAGES.CHECKOUT
را به کاربر نمایش دهد.
src/Components/CartItem
🔗این کامپوننت وظیفه آن نمایش قیمت، نام و قیت کل محصول مذکور میباشد همچنین دارای سه دکمه میباشد که به شرح زیر است:
PLUS
که وظیفه آن اضافه کردن یک واحد به آن محصول میباشد.MINUS
که وظیفه آن کم کرد یک واحد از آن محصول میباشد.DELETE
که وظیفه آن حذف آن محصول از سبد خرید کاربر میباشد.App.js
🔗این فایل و کامپوننت بخش اصلی برنامه ما را تشکیل میدهد و وظیفه آن برقرار کردن راهبری یا همان Navigation میان صفحات با استفاده از کتابخانه react navigation
میباشد برنامه ما دارای دو صفحه اصلی است:
Shop
که باید کامپوننت Shop
را به کاربر نمایش دهد.Cart
که باید کامپوننت Cart
را به کاربر نمایش دهد.
تمامی این صفحات باید در گوشه راست بالا دکمه NavigationButton
را نمایش دهند که در ادامه به بررسی آن خواهیم پرداخت.src/Components/NavigationButton.jsx
🔗این کامپوننت با دریافت پراپس های مناسب باید موارد زیر را تکمیل نماید.
Shop
بودیم متن آن باید Cart
باشد و بالعکس.Shop
بودیم و بر روی آن فشار داده شد باید به صفحه Cart
منتقل شود و بالعکس.src
و فایل App.js
را بدون پوشه node_modules
ZIP کرده و ارسال کنید.