ProGraphs
به کد زیر دقت کنید: let obj = { whatIsThis: () => { console.log("this is:", this); } }; در این کد، متد whatIsThis داخل آبجکت obj تعریف شده است. اما با توجه به اینکه arrow functionها در جاوااسکریپت this ندارند، مقدار this داخل این تابع به آبجکت گلوبال…
جواب:
قبل جواب دادن به این سوال، بیاید ببینیم فیلدهای کلاس، بعد از transpile شدن چه شکلی میشوند:
برای این کار یه کلاس ساده با دو تا فیلد counter و handleClick تعریف میکنیم. خروجی ساده شدهی babel با presetهای ES2017 و stage-3 رو تو کد زیر میبینید:
از این کد واضحه که متدهای کامپوننت که با arrow functionها تعریف میکنیم، در واقع به داخل constructor منتقل میشن.
همچنین جالبه بدونید که arrow functionها this ندارند. یعنی مقدار this داخل یه arrow function مثل یه متغیر معمولی تعیین میشه. به این صورت که انجین جاوااسکریپت اول داخل خود تابع دنبال identifierی به اسم this میگرده و وقتی پیداش نکرد، مقدار this توی تابع بیرونی رو پیدا میکنه (در نتیجه مقدار this داخل arrow functionها برابر مقدار this بیرون از اونهاست).
پس مقدار this داخل این arrow functionها برابر مقدار this داخل constructor خواهد بود.
از طرفی شاید بپرسید زمانی که ما متد handleClick رو صدا میکنیم، اجرا شدن constructor تموم شده. پس چطور همچنان arrow function به مقدار this داخل constructor دسترسی داره؟
برای فهمیدن این موضوع باید با مفهوم closure آشنا باشیم. در واقع تا زمانی که به تابع handleClick یک reference داشته باشیم، انجین جاوااسکریپت scope تابع constructor رو از memory پاک نمیکنه!
بنابراین تابع handleClick به مقدار this داخل constructor دسترسی داره. حتی با اینکه زمانی که این تابع رو صدا میکنیم، اجرا شدن constructor تموم شده!
قبل جواب دادن به این سوال، بیاید ببینیم فیلدهای کلاس، بعد از transpile شدن چه شکلی میشوند:
برای این کار یه کلاس ساده با دو تا فیلد counter و handleClick تعریف میکنیم. خروجی ساده شدهی babel با presetهای ES2017 و stage-3 رو تو کد زیر میبینید:
class Button {همینطور که میبینید، فیلدهای کلاس به داخل constructor منتقل شدند. حتی فیلد handleClick که با arrow function تعریف کردیم.
constructor() {
this.counter = 0;
this.handleClick = () => {
console.log("this is: ", this);
};
}
}
از این کد واضحه که متدهای کامپوننت که با arrow functionها تعریف میکنیم، در واقع به داخل constructor منتقل میشن.
همچنین جالبه بدونید که arrow functionها this ندارند. یعنی مقدار this داخل یه arrow function مثل یه متغیر معمولی تعیین میشه. به این صورت که انجین جاوااسکریپت اول داخل خود تابع دنبال identifierی به اسم this میگرده و وقتی پیداش نکرد، مقدار this توی تابع بیرونی رو پیدا میکنه (در نتیجه مقدار this داخل arrow functionها برابر مقدار this بیرون از اونهاست).
پس مقدار this داخل این arrow functionها برابر مقدار this داخل constructor خواهد بود.
از طرفی شاید بپرسید زمانی که ما متد handleClick رو صدا میکنیم، اجرا شدن constructor تموم شده. پس چطور همچنان arrow function به مقدار this داخل constructor دسترسی داره؟
برای فهمیدن این موضوع باید با مفهوم closure آشنا باشیم. در واقع تا زمانی که به تابع handleClick یک reference داشته باشیم، انجین جاوااسکریپت scope تابع constructor رو از memory پاک نمیکنه!
بنابراین تابع handleClick به مقدار this داخل constructor دسترسی داره. حتی با اینکه زمانی که این تابع رو صدا میکنیم، اجرا شدن constructor تموم شده!
Twitter
getify
"Arrow functions are bound to their parent's context." Nope, inaccurate. Arrow functions do not have a `this`, which means any usage of `this` inside an arrow function is just like any other variable, and is looked up lexically through parent scopes until…
ProGraphs
جواب: قبل جواب دادن به این سوال، بیاید ببینیم فیلدهای کلاس، بعد از transpile شدن چه شکلی میشوند: برای این کار یه کلاس ساده با دو تا فیلد counter و handleClick تعریف میکنیم. خروجی ساده شدهی babel با presetهای ES2017 و stage-3 رو تو کد زیر میبینید: class…
ویرگول
یه نکتهی جالب راجع به arrow functionها در کلاس کامپوننتهای ریاکت
چرا رفتار arrow functionها توی کلاس کامپوننتهای ریاکت و آبجکتهای معمولی فرق میکنه؟!
احتمالا دقت کردهاید که وقتی میخوایم یه پراپرتی CSS رو تو حالت hover یا ... تغییر بدیم، مجبوریم اون پراپرتی رو دوباره با مقادیر جدید تکرار کنیم.
اما حالا با متغیرهای CSS و تابع calc میتونیم بدون تکرار کردن دوبارهی پراپرتیها، بین دو مقدار switch کنیم. به عنوان مثال:
حالا برای اینکه عنصر رو 45deg بچرخونیم و top 10px بهش بدیم، فقط کافیه مقدار متغیر i رو 1 کنیم!
دقت کنید که تو این ترفند داریم از ویژگی live بودن متغیرهای CSS استفاده میکنیم. پس با متغیرهای SASS نمیتونیم این کار رو انجام بدیم.
برای مقایسهی بهتر، توی ویدیو پراپرتیهای transform و background رو با استفاده از این ترفند (بدون تکرار کردن کردن پراپرتیها) تغییر میدیم.
#quicktip #css #trick #dry
@ProGraphs
اما حالا با متغیرهای CSS و تابع calc میتونیم بدون تکرار کردن دوبارهی پراپرتیها، بین دو مقدار switch کنیم. به عنوان مثال:
transform: rotate(calc(var(--i) * 45deg));توی این کد اگر متغیر i = 0 باشه، عنصرمون rotate و top نداره.
top: calc(var(--i) * 10px);
حالا برای اینکه عنصر رو 45deg بچرخونیم و top 10px بهش بدیم، فقط کافیه مقدار متغیر i رو 1 کنیم!
دقت کنید که تو این ترفند داریم از ویژگی live بودن متغیرهای CSS استفاده میکنیم. پس با متغیرهای SASS نمیتونیم این کار رو انجام بدیم.
برای مقایسهی بهتر، توی ویدیو پراپرتیهای transform و background رو با استفاده از این ترفند (بدون تکرار کردن کردن پراپرتیها) تغییر میدیم.
#quicktip #css #trick #dry
@ProGraphs
میدونیم که تغییر پراپرتی box-shadow با CSS جزو انیمیشنهای نسبتا سنگین محسوب میشه و میتونه باعث کند شدن انیمیشن بشه.
اما با یه ترفند جالب میتونیم box-shadow یه عنصر رو خیلی روانتر animate کنیم.
به این صورت که یه pseudo element به اندازهی خود عنصر تعریف میکنیم و box-shadow رو به این pseudo element میدیم. حالا کافیه opacity این pseudo element رو تغییر بدیم (به کد داخل عکس دقت کنید).
در واقع با این ترفند به جای پراپرتی box-shadow، پراپرتی opacity رو تغییر دادیم (animate کردن پراپرتی opacity برای مرورگر سادهتره)
کد کامل این ترفند رو میتونید اینجا ببینید.
ترفندهای مشابه برای تغییر بهینهتر طول و عرض عنصر هم وجود داره که در مطالب بعدی بررسی میکنیم :)
#quicktip #css #performance #trick
@ProGraphs
اما با یه ترفند جالب میتونیم box-shadow یه عنصر رو خیلی روانتر animate کنیم.
به این صورت که یه pseudo element به اندازهی خود عنصر تعریف میکنیم و box-shadow رو به این pseudo element میدیم. حالا کافیه opacity این pseudo element رو تغییر بدیم (به کد داخل عکس دقت کنید).
در واقع با این ترفند به جای پراپرتی box-shadow، پراپرتی opacity رو تغییر دادیم (animate کردن پراپرتی opacity برای مرورگر سادهتره)
کد کامل این ترفند رو میتونید اینجا ببینید.
ترفندهای مشابه برای تغییر بهینهتر طول و عرض عنصر هم وجود داره که در مطالب بعدی بررسی میکنیم :)
#quicktip #css #performance #trick
@ProGraphs
ProGraphs
میدونیم که تغییر پراپرتی box-shadow با CSS جزو انیمیشنهای نسبتا سنگین محسوب میشه و میتونه باعث کند شدن انیمیشن بشه. اما با یه ترفند جالب میتونیم box-shadow یه عنصر رو خیلی روانتر animate کنیم. به این صورت که یه pseudo element به اندازهی خود عنصر تعریف…
This media is not supported in your browser
VIEW IN TELEGRAM
توی این ویدیو هم مشخصه که عنصر قرمز، مرورگر رو در طول انیمیشن مجبور به انجام عملیات paint میکنه اما انیمیشن عنصر سبز بهینهتر اجرا میشه.
هومن هاتفی مدیر طراحی اسنپ و اسنپ تریپ و مدرس طراحی محصول در مدرسهی اینورس قراره امشب ساعت ۹ وایرفریم بزنه و استریم کنه! از دست ندین 👇🏻
www.twitch.tv/h8man13
⚠️ ویپیان تون رو روشن کنین :)
🔺 بقیهی رفقای طراحتون رو هم با خبر کنین و تک خور نباشین. 😂
کانال @ProGraphs رو هم دنبال کنین.
www.twitch.tv/h8man13
⚠️ ویپیان تون رو روشن کنین :)
🔺 بقیهی رفقای طراحتون رو هم با خبر کنین و تک خور نباشین. 😂
کانال @ProGraphs رو هم دنبال کنین.
🔺LIVE🔺
همین الان با هومن هاتفی مدیر طراحی اسنپ و اسنپ تریپ و مدرس طراحی محصول در مدرسهی اینورس با موضوع Random Cafe Bazzar app redesign همراه باشین 👇🏻
www.twitch.tv/h8man13
⚠️ یادتون نره ویپیان تون رو روشن کنین :)
🔺 باز هم بقیهی رفقای طراحتون رو هم با خبر کنین 😉
کانال @ProGraphs رو هم دنبال کنین.
همین الان با هومن هاتفی مدیر طراحی اسنپ و اسنپ تریپ و مدرس طراحی محصول در مدرسهی اینورس با موضوع Random Cafe Bazzar app redesign همراه باشین 👇🏻
www.twitch.tv/h8man13
⚠️ یادتون نره ویپیان تون رو روشن کنین :)
🔺 باز هم بقیهی رفقای طراحتون رو هم با خبر کنین 😉
کانال @ProGraphs رو هم دنبال کنین.
توی این کد سعی میکنیم درخواستی به سرور بفرستیم و اگر درخواست fail شد، بعد از 100ms دوباره این کار رو تکرار میکنیم.
اما بعد از اجرا شدن این پروسه به مدت طولانی، متوجه memory leak میشیم.
آیا میتونید این مشکل رو پیدا و حل کنید؟
(عکس ویرایش شد)
#question #js #promise #memoryleak
@ProGraphs
اما بعد از اجرا شدن این پروسه به مدت طولانی، متوجه memory leak میشیم.
آیا میتونید این مشکل رو پیدا و حل کنید؟
(عکس ویرایش شد)
#question #js #promise #memoryleak
@ProGraphs
Translate CSS selectors into plain English!
https://hugogiraudel.github.io/selectors-explained/
#tool #css
@ProGraphs
https://hugogiraudel.github.io/selectors-explained/
#tool #css
@ProGraphs
ProGraphs
توی این کد سعی میکنیم درخواستی به سرور بفرستیم و اگر درخواست fail شد، بعد از 100ms دوباره این کار رو تکرار میکنیم. اما بعد از اجرا شدن این پروسه به مدت طولانی، متوجه memory leak میشیم. آیا میتونید این مشکل رو پیدا و حل کنید؟ (عکس ویرایش شد) #question #js…
جواب:
میدونیم که برای انجام یک تسک async داخل promise chain میتونیم از یکی از تابعهای then، یک پرامیس return کنیم:
بعد از هربار fail شدن درخواست، توی then، دوباره fetchWithRetry رو صدا میکنیم که یه پرامیس برمیگردونه.
در واقع با این کار پشت سر هم پرامیسهای جدید به انتهای این promise chain اضافه میکنیم و نتیجه میشه یه promise chain بینهایت که تا زمانی که درخواست با موفقیت فرستاده نشه، garbage collected نمیشه!
برای حل این مشکل کافیه توی خط 3 نتیجهی تابع getWithRetry رو از then ریترن نکنیم.
توضیح کاملتر این مشکل رو میتونید اینجا بخونید.
میدونیم که برای انجام یک تسک async داخل promise chain میتونیم از یکی از تابعهای then، یک پرامیس return کنیم:
fetch(url)دوباره به خط سوم کد سوال دقت کنید،
.then(data => new Promise(resolve => setTimeout(resolve, 1000)))
.then(() => {})
بعد از هربار fail شدن درخواست، توی then، دوباره fetchWithRetry رو صدا میکنیم که یه پرامیس برمیگردونه.
در واقع با این کار پشت سر هم پرامیسهای جدید به انتهای این promise chain اضافه میکنیم و نتیجه میشه یه promise chain بینهایت که تا زمانی که درخواست با موفقیت فرستاده نشه، garbage collected نمیشه!
برای حل این مشکل کافیه توی خط 3 نتیجهی تابع getWithRetry رو از then ریترن نکنیم.
توضیح کاملتر این مشکل رو میتونید اینجا بخونید.
Cribl
Promise chaining memory leak
Cribl explores a chaining memory leak pattern recently discovered using JavaScript Promises. Learn how to work through these communication errors online.
پادکست طبقه ۱۶ – پادکستی به میزبانی سهیل علوی، بنیانگذار استارتآپ ریحون در تورنتو
اپیزود ۱ - گفتگو با محسن ملایری:
https://youtu.be/DiXfC6R22vE
اپیزود ۲ - بورس ایران | کیاوش کاویانی:
https://youtu.be/WNVmGwS6N8I
اپیزود ۳ - تجربه جذب سرمایه برای استارتاپ | سیاوش محمودیان:
https://youtu.be/kf87HRTP2Lk
اپیزود ۴ - عملگرایی | بهروز حریری:
https://youtu.be/txnw-qFYfsQ
پ.ن: انقدر پادکست جذاب و متفاوتی بود که دلم نیومد باهاتون به اشتراک نذارم. شما هم با دوستاتون به اشتراک بگذارین :)
اپیزود ۱ - گفتگو با محسن ملایری:
https://youtu.be/DiXfC6R22vE
اپیزود ۲ - بورس ایران | کیاوش کاویانی:
https://youtu.be/WNVmGwS6N8I
اپیزود ۳ - تجربه جذب سرمایه برای استارتاپ | سیاوش محمودیان:
https://youtu.be/kf87HRTP2Lk
اپیزود ۴ - عملگرایی | بهروز حریری:
https://youtu.be/txnw-qFYfsQ
پ.ن: انقدر پادکست جذاب و متفاوتی بود که دلم نیومد باهاتون به اشتراک نذارم. شما هم با دوستاتون به اشتراک بگذارین :)
YouTube
Episode 1 - Mohsen Malayeri محسن ملایری
Mohsen is a co-founder of Bettermode. A founding partner of Avatech that was recognized as top ten seed-investor and accelerator in the Middle East by Gust. Mohsen has been a key speaker at StartupTurkey, TEDx, StartupGrind and his works have been featured…
سایتهایی که زمانهای خالی افراد رو میگیرن و تایم برای جلسه پیشنهاد میدن:
https://www.when2meet.com/
https://doodle.com/en/
https://calendly.com/
@ProGraphs
https://www.when2meet.com/
https://doodle.com/en/
https://calendly.com/
@ProGraphs
Doodle
Free online meeting scheduling tool
Doodle is the fastest and easiest way to schedule anything — from meetings to the next great collaboration.
Forwarded from Siavash TV
ساعت ۷ شب به وقت تهران یک لایو خیلی جذاب در یوتیوب خواهیم داشت! نهایت سعیم رو میکنم که روی آپارات هم بالا بیاد.
لینک لایو: https://www.youtube.com/watch?v=CprMv3iaJek&feature=youtu.be
توی این قسمت میخوایم ادامه پروژهای که فرانتاندش رو دیروز زدیم رو بریم. برای پیاده سازی بکاند از Node.js استفاده میکنیم بر پایه چارچوب NestJS.
با React به GraphQL متصل خواهیم شد و از JWT برای Authentication استفاده میکنیم.
ظاهر قبلا در Figma طراحی شده و از Chakra UI برای پیادهسازیش استفاده خواهیم کرد.
اگر لایو قبلی رو که برای پیادهسازی فرانتاند بودرو ندیدید بهتره قبل از لایو امشب ببینیدش:
https://www.youtube.com/watch?v=IgJaDUEvvsA
لینک لایو: https://www.youtube.com/watch?v=CprMv3iaJek&feature=youtu.be
توی این قسمت میخوایم ادامه پروژهای که فرانتاندش رو دیروز زدیم رو بریم. برای پیاده سازی بکاند از Node.js استفاده میکنیم بر پایه چارچوب NestJS.
با React به GraphQL متصل خواهیم شد و از JWT برای Authentication استفاده میکنیم.
ظاهر قبلا در Figma طراحی شده و از Chakra UI برای پیادهسازیش استفاده خواهیم کرد.
اگر لایو قبلی رو که برای پیادهسازی فرانتاند بودرو ندیدید بهتره قبل از لایو امشب ببینیدش:
https://www.youtube.com/watch?v=IgJaDUEvvsA
Siavash TV
ساعت ۷ شب به وقت تهران یک لایو خیلی جذاب در یوتیوب خواهیم داشت! نهایت سعیم رو میکنم که روی آپارات هم بالا بیاد. لینک لایو: https://www.youtube.com/watch?v=CprMv3iaJek&feature=youtu.be توی این قسمت میخوایم ادامه پروژهای که فرانتاندش رو دیروز زدیم رو بریم.…
لینک جدید برای لایو:
https://www.youtube.com/watch?v=I9Nt95NSyb8
https://www.youtube.com/watch?v=I9Nt95NSyb8
YouTube
ساخت یک شبکه اجتماعی ساده با استفاده از NestJS, GraphQL, React, و Chakra UI - قسمت دوم
توی این قسمت با هم Storybook رو برای پروژه فرانتاند بالا میاریم و چند تا از کامپوننتهارو استوریشونو میسازیم.
مجموعهای از برگه تقلبهای برنامهنویسی 🔥
وقتی چیزی رو یادتون نمیاد میتونین خیلی سریع نحوهی نوشتن اون دستوری که میخواین رو از اینجا پیدا کنین.
https://devhints.io/
@ProGraphs
وقتی چیزی رو یادتون نمیاد میتونین خیلی سریع نحوهی نوشتن اون دستوری که میخواین رو از اینجا پیدا کنین.
https://devhints.io/
@ProGraphs
Devhints.io cheatsheets
https://assets.devhints.io/previews/index.jpg
A ridiculous collection of web development cheatsheets
هزینهی اضافه کردن npm package ی که میخواین به پروژهتون اضافه کنین رو از سایت زیر ببینین 👇🏻
https://bundlephobia.com/
@ProGraphs
https://bundlephobia.com/
@ProGraphs
🔥 طراحی وب رو از کجا شروع کنم؟
هر کدوم از ما روز اولی که میخواستیم طراحی وب رو شروع کنیم، اولین سوالی که داشتیم این بوده که خب از کجا شروع کنم؟ دنبال چه سرنخی باید برم و دنبالش بگردم؟ کدوم منبع بهتره؟ و ...
به نظرم ویدیوهای سیاوش که توی چنل یوتیوباش منتشر میکنه فوقالعاده خوبه 👌🏻(طبعا رایگان هم هست :) )
به این علت که از همون اول در قالب پروژه شروع میکنه آموزش دادن و هر جا هم که نیاز بود مبحثی رو توضیح بده، نکات اون مبحث رو میگه.
https://youtu.be/h4QQ4gD0yek
در کنار ویدیوهای سیاوش، این دو تا سایت هم میتونه بهتون کمک کنه 😉
- https://www.w3schools.com/
- https://css-tricks.ir/reading-list/
@ProGraphs
هر کدوم از ما روز اولی که میخواستیم طراحی وب رو شروع کنیم، اولین سوالی که داشتیم این بوده که خب از کجا شروع کنم؟ دنبال چه سرنخی باید برم و دنبالش بگردم؟ کدوم منبع بهتره؟ و ...
به نظرم ویدیوهای سیاوش که توی چنل یوتیوباش منتشر میکنه فوقالعاده خوبه 👌🏻(طبعا رایگان هم هست :) )
به این علت که از همون اول در قالب پروژه شروع میکنه آموزش دادن و هر جا هم که نیاز بود مبحثی رو توضیح بده، نکات اون مبحث رو میگه.
https://youtu.be/h4QQ4gD0yek
در کنار ویدیوهای سیاوش، این دو تا سایت هم میتونه بهتون کمک کنه 😉
- https://www.w3schools.com/
- https://css-tricks.ir/reading-list/
@ProGraphs
YouTube
آموزش طراحی وب - قسمت اول - Web Development Course - Part 1 - HTML
این اولین ویدیو از سری آموزشی طراحی وب هست. در این ویدیو مواردی که قراره در دوره آموزش داده بشرو بهشون اشاره کردم و همینطور کلیات HTML و اینکه چطور میتونید بیشتر در این مورد یاد بگیرید رو توضیح دادم. کل آموزش کمتر از ۴۵ دقیقه هست و در انتها تقریبا میتونید…