restate / v1.0.0
Часті запитання
Відповіді на найчастіші запитання про рендеринг, збереження, області й помилки в restate.
Відповідних запитань немає
Спробуйте інше слово або покажіть усі запитання.
ОсновиЧи потрібен мені Provider?
Ні. Сховище — значення рівня модуля; його може використовувати будь-який компонент, що його імпортує. Використовуйте useRestateScope, коли стан має належати екземпляру компонента.
ОсновиЧому мій компонент перемальовується за кожної зміни?
Виклик хука без selector підписує на все значення. Передайте selector, що повертає лише те, що показує компонент.
ОсновиМій selector повертає об’єкт і перемальовується щоразу.
Новий об’єкт ніколи не рівний попередньому за Object.is. Передайте shallow другим аргументом або вибирайте поля окремо.
ОсновиОб’єкт змінився, але нічого не оновилося.
set отримав той самий об’єкт, тож restate не побачив змін. Повертайте із set новий об’єкт або масив.
ЗбереженняДе чекати на збережені дані?
Один раз, у клієнтській точці входу: виконайте await restateManager.ready перед рендером застосунку. Відтак компоненти одразу читають збережені значення. Сховища в useRestateScope чекають на власний scope.manager.ready.
ЗбереженняКоли дані записуються у сховище?
Лише коли ви викликаєте save() або, якщо ввімкнено autoSave, після змін. Правка змінює пам’ять; status().dirty повідомляє, що є незбережені зміни.
ЗбереженняautoSave чи save()?
Використовуйте autoSave для налаштувань і чернеток, які завжди мають зберігатися. Використовуйте save(), коли вирішує користувач — кнопкою «Зберегти» чи надсиланням форми. save() можна викликати й за ввімкненого autoSave, наприклад на pagehide.
ПомилкиrestateManager.ready відхилено. Що робити?
Він відхиляється з BULK_OPERATION_FAILED, коли запис не вдалося прочитати, мігрувати чи перевірити. error.failures перелічує кожне сховище і його помилку. Виправте чи очистьте запис, викличте initialize() цього сховища й знову зверніться до ready.
ПомилкиЯ бачу QUEUE_FULL або STORAGE_TIMEOUT.
Сховище повільніше, ніж робота, яку ви ставите в чергу. Не викликайте save() у щільному циклі — збереження в очікуванні й так бере найсвіжіше значення — або використовуйте autoSave з очікуванням. За потреби налаштуйте maxPendingOperations і operationTimeoutMs.
ПомилкиЗапізнілий запит пише у сховище після демонтування.
set() і reset() на знищеному сховищі ігноруються — як оновлення стану React після демонтування. Підписка кидає STORE_DESTROYED, а команди сховища відхиляються.
ОбластіМоє сховище в області ігнорує нові props.
Фабрика виконується один раз, як ініціалізатор useState. Рендеріть компонент із key для кожного документа, щоб кожен новий документ мав нову область.
ОбластіЯк уникнути розбіжностей під час гідратації?
Передавайте ті самі серверні дані як props на сервері й на клієнті та створюйте з них сховище в useRestateScope. Початкове значення стає серверним знімком.
ОбластіЧому мого сховища з області немає в restateManager.ready?
Збережувані сховища в області починають завантаження після коміту компонента-власника на клієнті. Чекайте на scope.manager.ready всередині межі завантаження в цьому компоненті.
ЗбереженняMMKV_UNAVAILABLE у React Native.
Встановіть react-native-mmkv і його нативні залежності, потім перезберіть застосунок. В Expo використовуйте development build. Сховища в пам’яті працюють без MMKV.