Ditty | دیتی
رفتن به کانال در Telegram
دیتی | دنیای سادهشدهٔ برنامهنویسی وب https://ditty.ir
نمایش بیشتر3 419
مشترکین
-224 ساعت
-157 روز
-3230 روز
آرشیو پست ها
3 419
🔺نویسندهٔ کتاب You Don't Know JS، آقای کایل سیمپسون یه جایی درباره رجکت شدنش توی مصاحبه با یه شرکت معروف صحبت میکرد و میگفت اون شرکت با دلیل اینکه «فکر نمیکنیم به اندازهٔ کافی جاوااسکریپت بلد باشی» من رو رد کردن.
- داستانهای جالبی رو از رجکت شدن افراد توی مصاحبههای شغلی اینجا میتونین ببینین:
https://rejected.us
#interview
3 419
🔺یه نکتهٔ ریز ریاکتی که دوست داشتم براتون به اشتراک بذارم
- همونطور که میدونیم وقتی توی یک کامپوننت والد تغییری رخ میده (مثلاً State بروز میشه)، باعث میشه کامپوننتهای فرزند Re-render بشن. برای جلوگیری از این اتفاق میتونیم از
React.memo تو کامپوننت فرزند استفاده کنیم
- کامپوننتی که از React.memo استفاده میکنه، فقط زمانی Re-render میشه که تغییری توی Props اون رخ بده
- حالا فرض کنیم میخوایم از کامپوننت والد به فرزند یک آبجکت یا یک تابع (Callback) رو پاس بدیم. اینجا حتی اگه تغییری توی این آبجکت یا تابع رخ نده، در صورت ری-رندر شدن کامپوننت والد، کامپوننتهای فرزند در هر صورت (با memo یا بدون اون) ری-رندر میشن
- دلیل این اتفاق اینه که توی Re-render هایی که برای یک کامپوننت رخ میده، تمام State ها از نو ساخته میشن و بنابراین اگه یک State از نوع آبجکت داشته باشیم، اون آبجکت توی رندر اولیه کاملاً متفاوت هست با آبجکتی که توی رندرهای بعدی داریم. گرچه ممکنه تغییری توی ظاهر آبجکت رخ نده، میدونیم که دو آبجکت با ظاهر یکسان با هم برابر نیستن
- بنابراین اگه یک کامپوننت فرزند داره از React.memo استفاده میکنه و در صورتی که داریم یک آبجکت یا تابع (توابع هم نوعی آبجکت هستن) رو به اون کامپوننت پاس میدیم، با Re-render شدن کامپوننت والد، کامپوننت فرزند باز هم Re-render میشه. چون React.memo میبینه که پراپرتیها با هم برابر نیستن {} ==! {}
- اینجاست که هوکهای useCallback و useMemo به کارمون میان. این هوکها تضمین میکنن که توی رندرهای متعدد، مقدارها و توابع ما بدون تغییر باقی میمونن و توی هر رندر دقیقاً همون مقدار پیشین رو برمیگردونن
- بنابراین، اگه جایی از برنامه پرفورمنس برامون اهمیت داره و به کامپوننتهای فرزند داریم مقادیر غیر Primitive (آبجکت، آرایه، تابع کالبک) پاس میدیم، بهتره به این نکته توجه کنیم
- مثال عملی رو میتونید از اینجا ببینید:
https://codesandbox.io/p/sandbox/react-memo-usecallback-hzxfmj
پ.ن: این فقط یکی از کاربردهای useMemo هست. کاربرد اصلی اون کش کردن خروجی توابع هست.
#react #tricks3 419
🔺یه نکتهٔ ریز ریاکتی که دوست داشتم براتون به اشتراک بذارم
- همونطور که میدونیم وقتی توی یک کامپوننت والد تغییری رخ میده (مثلاً State بروز میشه)، باعث میشه کامپوننتهای فرزند Re-render بشن. برای جلوگیری از این اتفاق میتونیم از React.memo تو کامپوننت فرزند استفاده کنیم
- کامپوننتی که از React.memo استفاده میکنه، فقط زمانی Re-render میشه که تغییری توی Props اون رخ بده
- حالا فرض کنیم میخوایم از کامپوننت والد به فرزند یک آبجکت یا یک تابع (Callback) رو پاس بدیم. اینجا حتی اگه تغییری توی این آبجکت یا Callback رخ نده، در صورت ری-رندر شدن کامپوننت والد، کامپوننتهای فرزند در هر صورت (با memo یا بدون اون) ری-رندر میشن
- دلیل این اتفاق اینه که توی Re-render هایی که برای یک کامپوننت رخ میده، تمام State ها از نو ساخته میشن و بنابراین اگه یک State از نوع آبجکت داشته باشیم، اون آبجکت توی رندر اولیه کاملاً متفاوت هست با آبجکتی که توی رندرهای بعدی داریم. گرچه ممکنه تغییری توی آبجکت رخ نده، میدونیم که دو آبجکت با ظاهر یکسان با هم برابر نیستن
3 419
🔺ترفند: توی کنسول کروم و فایرفاکس میتونیم با استفاده از
0$ به آخرین المنتی که توی تب Inspect انتخاب شده دسترسی داشته باشیم
#tricks3 419
🔺ترفند: توی کنسول کروم و فایرفاکس میتونیم با استفاده از
0$ به آخرین المنتی که توی تب Inspect انتخاب شده دسترسی داشته باشیم
#tricks3 419
🔺سوال مصاحبه: چرا توی JSX ریاکت، برای رندر کردن یک لیست از
()foreach. بجای ()map. استفاده نمیکنیم؟
- جوابتون رو توی کامنتها به اشتراک بذارین👇👏
#quiz3 419
🔺هزاران آیکون SVG 👌
• https://iconbuddy.app
• https://fonty.io
• https://iconoir.com
• https://healthicons.org
• https://atlasicons.vectopus.com
• https://www.mingcute.com
#links
3 419
🔺معیار LCP از Core Web Vitals
- گوگل با LCP مدت زمانی که طول میکشه بزرگترین المنت توی Viewport لود بشه رو اندازهگیری میکنه
- دلایلی مثل غیر بهینهبودنِ سرور و تصاویر و فایلهای جاوااسکریپتی و فونتها میتونن امتیاز پایینی برای LCP رقم بزنن
- با استفاده از تکنیکهایی مثل SSR SSG و بهینهسازی تصاویر و ریسورسها میتونیم یک LCP عالی داشته باشیم
- توی این پست بیشتر با دلایل LCP ضعیف و با نکاتی برای بهبود اون آشنا میشیم:
ditty.ir/535
#performance
3 419
🔺عملگر Non-null Assertion توی تایپاسکریپت چیه؟ 🤔
- توی این عکس اگه به انتهای خط اول نگاه کنین، یک علامت تعجب انتهای اون عبارت قرار گرفته
- این عملگر به تایپاسکریپت میگه که ما مطمئن هستیم این عبارت Null نیست و لطفاً توی ادامه Null بودن اون رو بررسی نکن
- بدون اون عملگر، تایپاسکریپت توی خط ۳ خطا نشون میداد که 'el' is possibly 'null'
- این کد رو میتونید توی این صفحه اجرا کنین
#typescript
3 419
🔺منظور از Shallow Rendering توی برنامه های فرانتاند چیه؟ 🤔
ـ Shallow Rendering یک تکنیک تستنویسی هست که بیشتر توی فریمورکهای Component-Based مثل ویو و ریاکت دیده میشه. وقتی میخوایم یک کامپوننت رو با تکنیک Shallow Rendering تست کنیم، هنگام تست فقط خود کامپوننت رندر میشه و کامپوننتهای داخلی اون کامپوننت رندر نمیشن تا توجه و تمرکز روی خود کامپوننت والد باشه. با این کار، تست کردن راحتتر، سریعتر و دقیقتر خواهد بود. اما باید بدونیم که استفاده از Shallow Rendering همیشه خوب نیست.
از معایب Shallow Rendering اینه که:
- ممکنه رفتارهای اون کامپوننت رو توی محیطهای واقعی نادیده بگیریم
- اگه کامپوننت به کامپوننتهای داخلی وابستگی داشته باشه ممکنه حتی باعث سختتر شدن تست بشه
- باعث نادیده گرفتهشدن خیلی از تعاملهای بین کامپوننت والد و فرزندها میشه که باعث میشه تست کمتر قابل اعتماد باشه
- پس بهتره از این تکنیک هم مثل هر چیز دیگهای با آگاهی استفاده کنیم
#testing
3 419
یک نمونه دیگه از این دست سوالات رو میتونین اینجا پیدا کنین:
https://github.com/viraptor/reverse-interview
که به فارسی هم ترجمه شده:
https://github.com/Kaaveh/reverse-interview/blob/master/translations/PERSIAN.md
#links
3 419
این پکیج رو آپدیت کردیم و چند تا ویژگی اضافه کردیم. از جمله قابلیت نمایش پیامهای دلخواه وقتی یک Regex با خطا مواجه میشه.
همچنین آموزش استفاده از اون توی ریاکت رو هم قرار دادم.
ممنون میشم حمایت کنین 😉✌️
#tools
3 419
🔺برای نامگذاری تایپهای توی تایپاسکریپت چه استانداردهایی وجود داره؟
۱. از حالت PascalCase استفاده کنیم. مثلاً User یا UserActivity
۲. از اسمهایی که برای شما و بقیه توسعهدهندهها خوانا و واضح هستن استفاده کنیم. مثلاً CustomerRecord بجای Record
۳. از حالت مفرد بجای جمع استفاده کنیم. مثلاً UserActivity بجای UserActivities. اگه نیاز به حالت جمع بود میتونیم براحتی از
UserActivity[] استفاده کنین
۴. اگه از اینترفیسها استفاده میکنین، از حرف I ابتدای اسم استفاده کنیم (اختیاری). مثلاً IBook
۵. از اسمهای کلی (جنرال) برای تایپهای مشابه خودداری کنیم. و بهتره تایپها کاربرد مشخصی داشته باشن (اصل چهارم اصول سالید)
۶. قانون Hungarian notation. یعنی از آوردن نوع تایپ توی اسم تایپ خودداری کنیم. مثلاً UserNameString
۷. برای جنریکها اشکالی نداره که از اسمهای خوانا استفاده کنیم. مثلاً func<TItem> بجای func<T>
#typescript3 419
🔺میخواید ببینید یک وبسایت از چه فونتهایی استفاده میکنه؟ این ابزار رو ببینید:
https://fonty.io
#links
3 419
🔺گوگل برای سنجش سرعت و Interactivity یک وبسایت از معیار FID از Core Web Vitals استفاده میکنه
- این معیار فاصلهٔ زمانی بین اولین تعامل کاربر با صفحه (مثل کلیک روی یک لینک یا دکمه) تا پاسخ مرورگر به اون تعامل رو اندازهگیری میکنه
- اگه یک امتیاز خوب میخوایم، باید زیر ۱۰۰ میلیثانیه به این تعامل پاسخ بدیم و برای این کار باید نکتهها و تکنیکهای #بهینهسازی مختلفی رو به کار بگیریم
- توی پست جدید دیتی با دلایل FID ضعیف و همچنین با نکتهها و تکنیکهایی برای داشتن یک FID عالی آشنا میشیم: 🚀
ditty.ir/533
#performance
3 419
🔺خیلی لذت بخشه وقتی روی پروژههای اپنسورس کار میکنی. مخصوصاً وقتی اولین کارت باشه
کمیل این بازی سودوکو رو طراحی کرده و سورسش رو هم روی گیتهاب گذاشته که نکتههای خوبی میتونین ازش یاد بگیرین:
https://sudoku.komeilmehranfar.com
سورس کد:
https://github.com/komeilmehranfar/sudoku-core
اطلاعات بیشتر:
https://www.linkedin.com/posts/komeilmehranfar_sudoku-core
پ.ن: شما هم اگه پروژه اپنسورسی دارین، توی کامنتها به اشتراک بذارین
#links
3 419
🔺این مقاله خیلی جالبه: ۶ قطعه کد کاربردی CSS که هر توسعهدهندهٔ فرانتاند باید اونها رو بدونه:
https://web.dev/articles/6-css-snippets-every-front-end-developer-should-know-in-2023
#css
