برنامه نویسی

مدل تنبل در Daxus – انجمن DEV

در Daxus، توسعه‌دهندگان این انعطاف‌پذیری را دارند که به‌روزرسانی‌های حالت را خودشان مدیریت کنند و ساختارهای حالت سفارشی مانند صفحه‌بندی برای یک منبع حقیقت را امکان‌پذیر می‌سازند. با این حال، همه داده ها به یک ساختار داده سفارشی نیاز ندارند. برای اکثر داده‌ها، ما به سادگی نیاز داریم که داده‌های واکشی شده را بدون نگرانی در مورد اینکه چگونه با وضعیت مدل همگام‌سازی می‌شوند، ثبت کنیم.

برای ساده کردن کد مورد نیاز برای چنین سناریوهایی، Daxus ویژگی جدیدی به نام “مدل تنبل” را معرفی می کند. بیایید نحوه استفاده از این ویژگی را بررسی کنیم.

ایجاد یک مدل تنبل

const lazyModel = createLazyModel();

const getUser = lazyModel.defineNormalAccessor<string, User>({
  fetchData: async (userId) => {
    return getUserApi(userId);
  },
});

function useUser(userId: string) {
  return useLazyAccessor(getUser(userId));
}
وارد حالت تمام صفحه شوید

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

هنگام استفاده از createLazyModel، نیازی به ارائه حالت اولیه نیست، و نیازی به ایجاد آداپتور ندارید زیرا نیازی به مدیریت نحوه همگام سازی داده های واکشی شده با وضعیت مدل ندارید.

توصیه می شود از useLazyAccessor قلاب با لوازم جانبی تعریف شده با استفاده از مدل تنبل. این قلاب امکان دسترسی آسان به داده های ذخیره شده را بدون نیاز به a getSnapshot تابع. با این حال، در صورت تمایل، همچنان می توانید a getSnapshot عملکرد برای انتخاب داده های خاص:

function useUserName(userId: string) {
  return useLazyAccessor(getUser(userId), (user) => user?.name);
}
وارد حالت تمام صفحه شوید

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

داده های جهش یافته

مدل تنبل نیز ارائه می دهد mutate روش، اما عملکرد آن کمی متفاوت از مدل اصلی است. توسعه‌دهندگان برای دسترسی به داده‌های ذخیره‌شده مربوطه باید یک دسترسی ارائه کنند:

lazyModel.mutate(getUser(userId), (prevUser) => {
  return { ...prevUser, name: 'new user name' };
});
وارد حالت تمام صفحه شوید

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

توجه داشته باشید که هنگام استفاده از مدل تنبل، مهم است که به جای جهش مستقیم داده های ذخیره شده، یک شی داده جدید را برگردانید.

وضعیت بازیابی

برای بازیابی حالت کش، می توانید از getState روش با اکسسوری مربوطه:

lazyModel.getState(getUser(userId)); // Returns User | undefined
وارد حالت تمام صفحه شوید

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

محدودیت ها

هنگام استفاده از مدل تنبل، از نظر کنترل بر وضعیت مدل یک معامله وجود دارد. داده ها به Accessor محدود می شوند و تعریف آن از مقدار بازگشتی به دست می آید fetchData تابع.

توصیه می شود فقط از یک مدل تنبل در برنامه خود استفاده کنید و از استفاده از ابزارهای دسترسی تولید شده توسط یک مدل معمولی با آن خودداری کنید mutate یا getState مواد و روش ها. این روش‌ها رفتارهای داخلی متفاوتی دارند و ممکن است هنگام استفاده با ابزارهای دیگر مدل‌ها، مطابق انتظار عمل نکنند.

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

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

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

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