sharare shad
sharare shad
خواندن ۲ دقیقه·۲ سال پیش

ریکت 18، یوزافکت دوبار اجرا میشه !!!


موقعی که داشتم با ریکت 18 کار میکردم متوجه یک موضوعی شدم که برام خیلی عجیب بود

اول فکر کردم شاید مشکل از کد منه ولی بعد که رفتم سراغ داکیومنت متوجه شدم که نه بابا ، فیچر جدید ریکت 18 هستش.مثال پایین رو ببینید:


حدس بزنید چی داخل کنسول چاپ شد؟

بله، یوزافکت دوبار محتوارو چاپ میکنه ، به طور خلاصه، این کامپوننت یکبار mountمیشه ، سپس unmountمیشه و سپس دوباره mountمیشه

حالا فرض کنید بخوایم دیتا رو فتچ کنیم چقدر میتونه پرفورمنس اپ رو بیاره پایین ؟بدتر از اون اینه که پروژه بزرگ باشه و رکوست های زیادی رو با یوزافکت بخوایم هندل کنیم !

خود داکیومنت ریکت این رو به عنوان یک فیچر جدید درنظر گرفته

https://beta-reactjs-org-git-effects-fbopensource.vercel.app/learn/synchronizing-with-effects

وقتی در فاز دولوپمنت هستیم به صورت دیفالت از </React.StrictMode >, استفاده میکنیم برای همین این اتفاق برای یوزافکتمون میافته !

حالا کجا این فیچر استفاده میشه ؟

مثال پایین رو ببینید :

با استفاده از ریکت،رفتار کاربر را از زمانی که از چت روم خارج می شه و سپس بهش برمیگرده رو شبیه سازی میکنیم ، این به ما این امکان رو میده تا از ایجاد دو اتصال(به اشتباه )جلوگیری کنیم و برنامه درست پیش بره

ولی خب هنوز مشکل اصلی باپرجاست . دیگه نباید دیتارو داخل یوزافکت بگیریم ، راه های دیگه ای هم وجود داره برای گرفتن دیتا ولی احیانا اگر خواستید از خود یوزافکت استفاده کنید میتونید به روش پایین که دوستان زحمت کشیدن پیش برید :

خودش توصیه کرده از کتابخونه ی react query استفاده کنید

یه راه دیگه هم هست که توصیه نمیشه در اینده ممکنه دردسر ساز بشه اونم اینه که کلا

کامنت بشه </React.StrictMode>


نظر شما چیه ؟

به نظرتون چه راه های دیگه ای وجود داره برای اینکه این مشکل رو حل کنیم ؟

:)مرسی که تا اینجا همراهی کردید امیدوارم مفید بوده باشه براتون
ریکتuseeffectjavascript
سلام من شراره هستم ، فرانت اند دولوپر هستم و درحال حاضر با React js پروژه هارو میسازم . سعی میکنم هرچی که به نظرم مفید و کارامد هست رو به اشتراک بذارم :)
شاید از این پست‌ها خوشتان بیاید