1. حلقه رویداد جاوااسکریپت چگونه کار میکند و چه تأثیری بر رندر و بهروزرسانیهای وضعیت React دارد؟
حلقه رویداد به جاوااسکریپت (تکریسمانی) امکان مدیریت عملیاتهای غیرهمزمان را با استفاده از پشته فراخوانی، صف وظایف (ماکروتسکها) و صف میکروتسکها میدهد.
در React:
setStateدستهبندیشده و غیرهمزمان است.
بهروزرسانیهای وضعیت و رندر پس از خالی شدن پشته فراخوانی فعلی انجام میشوند (بهعنوان میکروتسک یا ماکروتسک در صف قرار میگیرند بسته به زمینه).
درک این موضوع از شرایط رقابتی جلوگیری کرده و اطمینان میدهد که بهروزرسانیهای رابط کاربری بهصورت قابل پیشبینی رخ میدهند.
2. مدل ذهنی شما برای درک کلوژرهای جاوااسکریپت چیست و چگونه از آنها بهطور مؤثر در یک برنامه React استفاده میکنید؟
کلوژر تابعی است که به حوزه لغوی خود دسترسی حفظ میکند، حتی زمانی که خارج از آن حوزه فراخوانی شود.
در React:
برای بازگشتهای مموایز شده یا مدیریت وضعیت محصور شده در هوکهای سفارشی مفید است.
کلوژرها باید در افکتها با دقت مدیریت شوند تا از مشکلات وضعیت قدیمی جلوگیری شود.
3. ارثبری پروتوتایپی در جاوااسکریپت را چگونه توضیح میدهید و چگونه با ارثبری کلاسیک متفاوت است؟
ارثبری پروتوتایپی اشیاء را از طریق زنجیره [[Prototype]] به یکدیگر متصل میکند و امکان اشتراک ویژگیها را فراهم میکند.
برخلاف ارثبری کلاسیک:
جاوااسکریپت واگذاری شیء را به جای سلسلهمراتب کلاسها ترجیح میدهد.
پویاتر و انعطافپذیرتر است، که بهخوبی با الگوهای ترکیبی در React همخوانی دارد.
4. اهمیت کلمه کلیدی this در جاوااسکریپت چیست و چگونه اتصال آن را در کامپوننتهای React مدیریت میکنید؟
this به زمینه اجرا اشاره دارد. در کامپوننتهای کلاسی React، this اغلب به نمونه کامپوننت اشاره میکند.
در کامپوننتهای کلاسی:
this.handleClick=this.handleClick.bind(this);
در کامپوننتهای تابعی:
از this بهطور کامل با استفاده از هوکها و توابع پیکانی اجتناب میکنم.
توابع پیکانی this را بهصورت لغوی متصل میکنند.
5. ماهیت تکریسمانی جاوااسکریپت چگونه بر رویکرد شما برای مدیریت وظایف محاسباتی سنگین در یک برنامه React تأثیر میگذارد؟
از آنجا که جاوااسکریپت روی یک ریسمان واحد اجرا میشود، وظایف سنگین رابط کاربری را مسدود میکنند.
استراتژیها:
وب ورکرها برای انتقال کارهای سنگین CPU.
محدود کردن/تاخیر دادن ورودیها.
استفاده از requestIdleCallback یا setTimeout برای به تعویق انداختن کار.
نگه داشتن کامپوننتها خالص و سریع در رندر.
6. چگونه یک جریان کاری async/await قوی در یک برنامه React برای مدیریت چندین فراخوانی API طراحی میکنید؟
استفاده از async/await داخل useEffect، محصور در try/catch، و بهصورت اختیاری استفاده از Promise.all.
7. تفاوت بین پرامیسها و async/await در زیرساخت چیست و چگونه استفاده آنها را در React بهینه میکنید؟
پرامیسها مقادیر غیرهمزمان را نشان میدهند؛ then بازگشتها را زنجیره میکند.
async/awaitشکر سینتکسی روی پرامیسهاست که خوانایی و اشکالزدایی را بهبود میبخشد.
بهینهسازیها:
اجتناب از await تودرتو در حلقهها (استفاده از Promise.all).
مموایز کردن توابع غیرهمزمان با useCallback.
همیشه پاکسازی را در افکتهای غیرهمزمان مدیریت کنید تا از شرایط رقابتی جلوگیری شود.
8. چگونه یک ابزار مبتنی بر پرامیس سفارشی (مثل مکانیزم تلاش مجدد) برای یک برنامه React پیادهسازی میکنید؟