شرکت متا رسما از شبکه اجتماعی جدیدش یعنی Threads با تاکید بر محتوای متن محور برای رقابت با توییتر رونمایی کرد.
این اپ که قرار بود امروز عصر در دسترس عموم قرار بگیره، پیش از موعد مقرر و در صبح امروز در دسترس کاربران اندروید و iOS قرار گرفت.
کاربران در این اپ میتونن متن هایی تا 500 کاراکتر، لینک، عکس و ویدیوهای تا 5 دقیقه منتشر کنن و امکان ری پست کردن و کوت کردن پستها هم مشابه توییتر امکان پذیره.
این اپ وابسته به اینستاگرامه و تنها راه استفاده از اون داشتن اکانت اینستاگرام برای ورود هست و بعد از لاگین در اکانت اینستاگرام، لیستی از فالویینگهای اینستاگرامتون نمایش داده میشه که با انتخاب هر کدوم، هر زمان که اون شخص به Threads ملحق شد، به طور خودکار توسط شما فالو میشه.
این اتصال و وابستگی به اینستاگرام مزیت بزرگی به این اپ جدید میده و به لطف کاربران بالای یک میلیاردی اینستاگرام، کاربران میتونن به سرعت وارد اون بشن و دوستانشون رو به راحتی در این اپ دنبال کنن. این مزیت به قدری قوی بوده که تعداد کاربران این اپ تنها چند ساعت بعد از عرضه اون به حدود 10 میلیون کاربر رسیده!
بعد از ورود به این اپ، صفحه اصلی اون ترکیبی از پستهای کاربرانی که فالو میکنین و بقیه کاربران خارج از فالویینگهای شما هستن رو نمایش میده. علاوه بر این امکان میوت و بلاک کردن کاربران و همچنین مخفی کردن پستهایی که دارای کلمات خاصی هستن هم وجود داره. همچنین امکان به اشتراک گذاری پستها در استوری اینستاگرام به طرز جذابی هم وجود داره.
در حال حاضر امکان دیدن صرف پستهای کاربرانی که دنبال میکنید وجود نداره ولی در اینده اضافه خواهد شد. همچنین بخش جستجوی اون مشابه اینستاگرام هست و فقط بقیه کاربران رو میتونید در اونجا پیدا کنید که کاربرد این اپ رو کم میکنه و با بخش جستجوی قدرتمند توییتر فاصله زیادی داره. همچنین فعلا خبری از هشتگها هم نیست.
علاوه بر این متا برای این اپ قابلیتهای غیرمتمرکزی هم در برنامه داره که به اون امکان میده که به بقیه شبکه های اجتماعی غیرمتمرکز که بر پایه پروتکل ActivityPub طراحی شدن مثل Mastadon متصل بشه و کاربران اونها با کاربران تردز و بالعکس تعامل داشته باشن که پتانسیل این اپ رو بالا میبره و کاربران رو در یک محصول متمرکز محصور نمیکنه.
@AlirezaJsTs
نمیدونم چرا همچین چیزی تو جاوااسکریپت وجود داره ولی اینجوری میتونین string رو تبدیل به number کنین!
@AlirezaJsTs
@AlirezaJsTs
🤣4
مقایسه خروجی نسخه اول هوش مصنوعی میدجرنی با اخرین نسخه اون (5.2) با ورودی یکسان، به مناسب یک سالگی هوش مصنوعی میدجرنی
@AlirezaJsTs
@AlirezaJsTs
چرا اصلا ما باید از useEffect استفاده کنیم؟
برای مثال فکر کنید یک اینپوت فرم دارین که به کاربر امکان این رو میده که زمانی که اسم کشوری رو وارد کرد، اطلاعات اون کشور رو براش نمایش بده
خوب چه زمانی میخاین fetch انجام بشه و اطلاعات اون کشور برای کاربر نمایش داده بشه؟
زمانی که کاربر وارد سایت شد؟
زمانی که یک re-render در کامپوننت اتفاق افتاد؟
یا فقط زمانی که کاربر اسم کشور مورد نظرش رو وارد فرم کرد؟
خوب باید بگم useEffect به ما اجازه میده تا کدهامون رو در زمان های مختلف اجرا کنیم،
این زمان ها شامل , Mount, Re-render و Unmount شدن کامپوننت ها هستن
▪️چرا fetch رو نباید بیرون از useEffect یا event handler انجام بدیم؟؟
یک مبحث داریم به نام side effects
هر فعالیتی که کامپوننت ما با بیرون از اسکوپ خودش داشته باشه بهش side effect میگیم، مثل:
Data fetching, setting up timers, writing to dom, mutating external variables
طبق باگ هایی که side effects برامون به وجود میارن ما نباید از side effects در render logic استفاده کنیم بنابراین فقط اجازه داریم side effect رو یا داخل event handlers و یا useEffect استفاده کنیم
مثلا وقتی که ما یک Http ریکوئست رو، که یک ارتباط با دنیای بیرون هست (یک side effect هست)، داخل render logic تعریف میکنیم چه اتفاقی می افته؟
function RenderLogic() {
const [lists, setLists] = useState([]);
const res = await fetch('apilink');
const data = await res.json();
setLists(data);
}
دقت کنین که تو این مثال ما کدهامون رو
در top level کامپوننت نوشتیم
اینجا وقتی fetch انجام میشه، ما state رو با قرار دادن data داخل setter function (setLists) آپدیت میکنیم و خوب همونطور که میدونید با آپدیت شدن state کامپوننت ما دوباره رندر میشه، و اینجا با رندر شدن کامپوننت دوباره fetch انجام میشه و state دوباره آپدیت میشه و این چرخه همینطور ادامه پیدا میکنه و باعث re-render های زیادی میشه که infinite loop نامیده میشه
که برای جلوگیری از infinite loop ما از useEffect استفاده میکنیم.
▪️درباره useEffect اینکه دو ارگیومنت داره
اولین ارگیومنت یک فانکشن هست که بعدا useEffect رو کال میکنه
و دومین یک dependency array هست که وظیفش تعیین کردن زمان های مختلفی هست که ما میخایم useEffect اجرا بشه، useEffect به صورت پیشفرض، بعد هر رندر اجرا میشه که برای جلوگیری از حالت پیشفرض ما از dependency array استفاده میکنیم.
▪️حالت های مختلف dependency array: []
1. در حالت اول useEffect در زمان mount و re-render شدن اجرا میشه
برای مثال وقتی یک props یا variable state رو داخل dependency array قرار میدیم، با هر تغییر در state یا props ریکت useEffect رو دوباره اجرا میکنه
به عبارتی ما useEffect رو با state و یا props همگام می کنیم
1. useEffect(function(){} , [list]);
2. حالت دوم، فقط در زمان mount اجرا میشه
2. useEffect(function(){} , [ ]);
3. زمانی که dependency array وجود نداشته باشه، useEffect با هر رندر اجرا میشه
3. useEffect(function(){});
@AlirezaJsTs
برای مثال فکر کنید یک اینپوت فرم دارین که به کاربر امکان این رو میده که زمانی که اسم کشوری رو وارد کرد، اطلاعات اون کشور رو براش نمایش بده
خوب چه زمانی میخاین fetch انجام بشه و اطلاعات اون کشور برای کاربر نمایش داده بشه؟
زمانی که کاربر وارد سایت شد؟
زمانی که یک re-render در کامپوننت اتفاق افتاد؟
یا فقط زمانی که کاربر اسم کشور مورد نظرش رو وارد فرم کرد؟
خوب باید بگم useEffect به ما اجازه میده تا کدهامون رو در زمان های مختلف اجرا کنیم،
این زمان ها شامل , Mount, Re-render و Unmount شدن کامپوننت ها هستن
▪️چرا fetch رو نباید بیرون از useEffect یا event handler انجام بدیم؟؟
یک مبحث داریم به نام side effects
هر فعالیتی که کامپوننت ما با بیرون از اسکوپ خودش داشته باشه بهش side effect میگیم، مثل:
Data fetching, setting up timers, writing to dom, mutating external variables
طبق باگ هایی که side effects برامون به وجود میارن ما نباید از side effects در render logic استفاده کنیم بنابراین فقط اجازه داریم side effect رو یا داخل event handlers و یا useEffect استفاده کنیم
مثلا وقتی که ما یک Http ریکوئست رو، که یک ارتباط با دنیای بیرون هست (یک side effect هست)، داخل render logic تعریف میکنیم چه اتفاقی می افته؟
function RenderLogic() {
const [lists, setLists] = useState([]);
const res = await fetch('apilink');
const data = await res.json();
setLists(data);
}
دقت کنین که تو این مثال ما کدهامون رو
در top level کامپوننت نوشتیم
اینجا وقتی fetch انجام میشه، ما state رو با قرار دادن data داخل setter function (setLists) آپدیت میکنیم و خوب همونطور که میدونید با آپدیت شدن state کامپوننت ما دوباره رندر میشه، و اینجا با رندر شدن کامپوننت دوباره fetch انجام میشه و state دوباره آپدیت میشه و این چرخه همینطور ادامه پیدا میکنه و باعث re-render های زیادی میشه که infinite loop نامیده میشه
که برای جلوگیری از infinite loop ما از useEffect استفاده میکنیم.
▪️درباره useEffect اینکه دو ارگیومنت داره
اولین ارگیومنت یک فانکشن هست که بعدا useEffect رو کال میکنه
و دومین یک dependency array هست که وظیفش تعیین کردن زمان های مختلفی هست که ما میخایم useEffect اجرا بشه، useEffect به صورت پیشفرض، بعد هر رندر اجرا میشه که برای جلوگیری از حالت پیشفرض ما از dependency array استفاده میکنیم.
▪️حالت های مختلف dependency array: []
1. در حالت اول useEffect در زمان mount و re-render شدن اجرا میشه
برای مثال وقتی یک props یا variable state رو داخل dependency array قرار میدیم، با هر تغییر در state یا props ریکت useEffect رو دوباره اجرا میکنه
به عبارتی ما useEffect رو با state و یا props همگام می کنیم
1. useEffect(function(){} , [list]);
2. حالت دوم، فقط در زمان mount اجرا میشه
2. useEffect(function(){} , [ ]);
3. زمانی که dependency array وجود نداشته باشه، useEffect با هر رندر اجرا میشه
3. useEffect(function(){});
@AlirezaJsTs
👍3
کاربرد متد flat. استفادش برای وقتیه که نخوایم for تو در تو بزنیم و در نتیجه کد تمیزتری داریم.
@AlirezaJsTs
@AlirezaJsTs
👍4
لوگوی جدید توییتر رسماً معرفی شد: حرف X بهجای پرنده
🔹همانطور که ایلان ماسک وعده داده بود، از لوگوی جدید توییتر رونمایی شد. لوگوی جدید این شبکه اجتماعی از پرنده، به حرف انگلیسی X تغییر میکند. درحالحاضر تصویر پروفایل ایلان ماسک و همچنین خود توییتر، حرف X است و البته نام پروفایل توییتر هم به X تغییر کرده است./دیجیاتو
@AlirezaJsTs
🔹همانطور که ایلان ماسک وعده داده بود، از لوگوی جدید توییتر رونمایی شد. لوگوی جدید این شبکه اجتماعی از پرنده، به حرف انگلیسی X تغییر میکند. درحالحاضر تصویر پروفایل ایلان ماسک و همچنین خود توییتر، حرف X است و البته نام پروفایل توییتر هم به X تغییر کرده است./دیجیاتو
@AlirezaJsTs
👎5👍1