لینکهای مفید برای شرکت در مسابقه:
در زمان مسابقه میتوانید سوالهای خود را از قسمت "سوال بپرسید" مطرح کنید.
پروژهی اولیه را از این لینک دانلود کنید. ساختار فایلهای این پروژه به صورت زیر است.
برای اجرای پروژه، باید 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
هستید.