عملگرهای اسپرد و رست در React – نوشتن کامپوننت‌های خوانا و مختصر

عملگرهای اسپرد و رست در جاوااسکریپت ابزارهایی قدرتمند برای مدیریت پراپس‌ها و داده‌های آبجکتی در React هستند. این مقاله نحوهٔ ارسال پراپس‌ها با اسپرد، استخراج پراپرتی‌های خاص با رست، و استفاده از destructuring برای نوشتن کامپوننت‌های خوانا و قابل نگهداری را بررسی می‌کند.

spread operatorspread operatorprops destructuringReact components

~2 دقیقه مطالعه · آخرین به‌روزرسانی ۲۲ بهمن ۱۴۰۴

مقدمه


در React، ارسال پراپس‌ها بین کامپوننت‌ها ممکن است در صورت ارسال دستی هر پراپرتی، طولانی و تکراری شود. عملگرهای اسپرد و رست در جاوااسکریپت این فرآیند را ساده‌تر و خواناتر می‌کنند. آن‌ها به ما اجازه می‌دهند تا چندین پراپرتی را به‌صورت تمیز و مؤثر مدیریت کنیم.


مرحله اول: ارسال پراپس‌ها به‌صورت دستی


در ابتدا، هر پراپرتی از آیتم به‌صورت جداگانه به کامپوننت Item ارسال می‌شود:


{list.map((item) => (
  
))}

این روش کار می‌کند، اما باعث شلوغی در کامپوننت والد می‌شود.


مرحله دوم: استفاده از عملگر اسپرد


می‌توانیم با استفاده از {...item} کد را ساده‌تر کنیم:


{list.map((item) => (
  
))}

این روش تمام پراپرتی‌های آیتم را به‌صورت پراپس به کامپوننت Item ارسال می‌کند.


مرحله سوم: استفاده از عملگر رست


برای حذف objectID از پراپس‌ها (که فقط برای کلید استفاده می‌شود)، از عملگر رست استفاده می‌کنیم:


{list.map(({ objectID, ...item }) => (
  
))}

اکنون objectID جدا شده و باقی‌ماندهٔ آیتم به‌صورت پراپس ارسال می‌شود.


destructuring پراپس‌ها در کامپوننت‌ها


در کامپوننت Item می‌توانیم پراپس‌ها را مستقیماً در امضای تابع destructure کنیم:


const Item = ({ title, url, author, num_comments, points }) => (
  
  • {title} {author} {num_comments} {points}
  • );

    destructuring تو در تو (اختیاری)


    برای آبجکت‌های تو در تو، می‌توان از destructuring تو در تو استفاده کرد:


    const Item = ({
      item: {
        title,
        url,
        author,
        num_comments,
        points,
      },
    }) => (...)

    از این روش فقط زمانی استفاده کنید که خوانایی را افزایش دهد.


    جمع‌بندی


    عملگرهای اسپرد و رست باعث تمیزتر شدن کدهای React می‌شوند. از اسپرد برای ارسال همهٔ پراپرتی‌ها، و از رست برای حذف پراپرتی‌های خاص استفاده کنید. ترکیب این روش‌ها با destructuring باعث نوشتن کدی خوانا، قابل نگهداری و حرفه‌ای می‌شود — مخصوصاً در پروژه‌های تیمی که وضوح کد اهمیت زیادی دارد.


    نوشته و پژوهش‌شده توسط دکتر شاهین صیامی

    مقالات مرتبط

    فرم‌ها در React – ارسال داده با onSubmit و action در فرم‌های جستجو

    فرم‌ها بخش جدایی‌ناپذیر هر اپلیکیشن مدرن هستند. در این مقاله، نحوهٔ ساخت فرم جستجو در React را بررسی می‌کنیم. ابتدا از onSubmit برای مدیریت ارسال فرم استفاده می‌کنیم و سپس با معرفی ویژگی action، فرم را به رفتار بومی HTML نزدیک‌تر می‌کنیم. این ساختار باعث افزایش خوانایی، قابلیت استفاده با صفحه‌کلید، و آمادگی برای نسخه‌های آیندهٔ React می‌شود.

    ادامه

    کتابخانه‌های شخص ثالث در React – استفاده از axios و async/await برای دریافت داده‌ها

    در این مقاله، نحوهٔ جایگزینی fetch با کتابخانهٔ axios برای دریافت داده‌ها از API در React را بررسی می‌کنیم. سپس با استفاده از async/await و بلوک try/catch، کد دریافت داده‌ها را خواناتر و قابل مدیریت‌تر می‌کنیم. این روش‌ها باعث افزایش سازگاری با مرورگرهای قدیمی، بهبود تست‌پذیری، و کاهش پیچیدگی کد می‌شوند.

    ادامه

    دریافت صریح داده‌ها در React – کنترل درخواست‌های API با دکمه تأیید

    در پیاده‌سازی اولیه، هر بار که کاربر در فیلد جستجو تایپ می‌کرد، درخواست جدیدی به API ارسال می‌شد. این مقاله نحوهٔ تغییر این رفتار به دریافت صریح داده‌ها را آموزش می‌دهد؛ به‌طوری‌که فقط با کلیک روی دکمهٔ تأیید، درخواست به API ارسال شود. با تعریف دو وضعیت مجزا برای searchTerm و url، و استفاده از useCallback و useEffect، کنترل کامل بر زمان ارسال درخواست فراهم می‌شود.

    ادامه

    وضعیت‌های غیرممکن در React – مدیریت پیش‌بینی‌پذیر وضعیت با useReducer

    استفاده هم‌زمان از چند useState برای مدیریت وضعیت‌های مرتبط می‌تواند منجر به وضعیت‌های غیرممکن و باگ‌های پنهان شود. این مقاله نشان می‌دهد چگونه با ترکیب وضعیت‌های مرتبط در یک useReducer واحد، می‌توان از بروز چنین مشکلاتی جلوگیری کرد. با تعریف یک ساختار وضعیت پیچیده شامل داده، بارگذاری و خطا، و استفاده از اکشن‌های مشخص، مدیریت وضعیت در React پیش‌بینی‌پذیرتر و قابل اطمینان‌تر می‌شود.

    ادامه

    مدیریت پیشرفته وضعیت در React – استفاده از useReducer برای انتقال‌های پیچیده

    در حالی که useState برای مدیریت وضعیت‌های ساده مناسب است، هوک useReducer در React راه‌حلی مقیاس‌پذیر برای مدیریت وضعیت‌های پیچیده و وابسته ارائه می‌دهد. این مقاله نحوهٔ مهاجرت وضعیت لیست داستان‌ها از useState به useReducer را بررسی می‌کند، و نشان می‌دهد چگونه با تعریف اکشن‌هایی مانند SET_STORIES و REMOVE_STORY می‌توان منطق وضعیت را به‌صورت متمرکز و خوانا مدیریت کرد.

    ادامه

    رندر شرطی در React – نمایش وضعیت بارگذاری و خطا هنگام دریافت داده‌های غیرهمزمان

    در React، رندر شرطی ابزاری قدرتمند برای کنترل نمایش رابط کاربری بر اساس وضعیت‌های مختلف است. این مقاله نحوهٔ نمایش پیام «در حال بارگذاری…» هنگام دریافت داده‌های غیرهمزمان، و پیام خطا در صورت شکست دریافت داده را بررسی می‌کند. با استفاده از useState و useEffect، وضعیت‌های isLoading و isError را مدیریت کرده و با استفاده از عملگرهای منطقی و ternary، رندر شرطی را پیاده‌سازی می‌کنیم.

    ادامه