برنامه نویسی

اجرای یک حالت بارگذاری اولیه

چگونه با استفاده از قلاب های html، javascript و reactjs یک حالت بارگذاری اولیه ایجاد می کنید؟

الزامات:
1) مولفه عملکردی واکنش نشان دهید.
2) فقط باید متن بارگیری را برگرداند: “Loading”.
3) نقطه هایی را که به صورت تدریجی (+1) به انتهای متن بارگذاری اضافه می شوند، هر ثانیه نشان دهید.
به عنوان مثال:
Loading. -1s- Loading.. -1s- Loading... -1s- Loading

رویکرد:

عناصر استاتیک را تعیین کنید. سپس دینامیک (حالت ها، قلاب ها و غیره) را اضافه کنید. طبق تفکر React doc.

اجرای المان استاتیک:

1) یک مؤلفه کاربردی ایجاد کنید که “Loading” را برمی گرداند.

const Loading = () => {
  const loadingText = "Loading";

  return (
    

{loadingText}

); }; export default Loading;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

دینامیک:

1) تعداد نقاط نشان دهنده وضعیتی از جزء است. بنابراین، با استفاده از متغیر حالت تعریف کنید useState.

const [dots, setDots] = useState(1);
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

و پس از بارگذاری متن، نقطه ها را اضافه کنید

{".".repeat(dots)}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

2) یک حالت به طور خودکار پس از هر ثانیه تغییر می کند. window.setInterval می تواند این وظیفه را انجام دهد. فعلاً تابع callback را خالی بگذارید.

window.setInterval(() => {
      // Logic to increment dots
    }, 1000);
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

3) ایجاد یک useEffect هوکی که فقط یک بار پس از رندر اولیه اجرا می شود.

useEffect(() => {
    window.setInterval(() => {
      // Logic to increment dots
    }, 1000);
  }, []);
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تا به حال، برنامه فقط “بارگیری” را نشان می دهد.
کمی مکث کنید و به منطق درون فکر کنید window.setInterval عملکرد برگشت به تماس

راه حل آشکار:

setDots((dots + 1) % 4);
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

با این حال، اشتباه است. جزء فقط از
“بارگیری.”-1s-“بارگیری….” سپس گیر می کند.

دلیل: را useEffect's پاسخ تماس fn در حالت اولیه نقاط (1) فعال می شود. هر گونه به روز رسانی در متغیر نقطه تاثیری بر بسته شدن ندارد useEffect's پاسخ به تماس fn.

Catch-1: گنجاندن نقطه در آرایه وابستگی useEffect معنی ندارد. زیرا پس از آن آن را صدا می کند window.setInterval در هر به روز رسانی وضعیت نقاط. (قابل استفاده است window.setTimeout در عوض اما چرا؟)

گرفتن-2: وضعیت نقاط مولفه بارگیری باید به آن وابسته باشد useEffect و window.setInterval. با این حال، با استفاده از نقطه به طور مستقیم در useEffect باعث می شود useEffect به آن وابسته باشد.

قبل از رفتن به مرحله بعدی، در مورد بسته شدن فکر کنید.

رویکرد تجدید نظر شده

تعریف کنید useEffect's callback's own dots state (say effectDots). را window.setIntervalتابع فراخوانی را افزایش می دهد effectDots و همچنین Loading Component را تنظیم می کند dots دولت
(کلید این است که وابستگی را تغییر دهید setInterval -> component's dots state به component's dots state -> setInterval. )

نسخه اصلاح شده توابع پاسخ به تماس useEffect و window.setInterval با یک ایالت محلی effectDots:

  useEffect(() => {
    let effectDots = 1;
    window.setInterval(() => {
      // increment, modulo 4
      // set the Loading component's state
      setDots(effectDots++ % 4);
    }, 1000);
  }, []);
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا