restate / v1.0.0
Често задавани въпроси
Отговори на най-честите въпроси за рендериране, запазване, scope и грешки в restate.
Няма съвпадащи въпроси
Опитайте с друга дума или покажете всички въпроси.
ОсновиНужен ли е Provider?
Не. Store е стойност на ниво модул; всеки компонент, който го импортира, може да го използва. Използвайте useRestateScope, когато състоянието трябва да принадлежи на екземпляр на компонент.
ОсновиЗащо компонентът ми се пререндерира при всяка промяна?
Извикването на hook без selector абонира за цялата стойност. Подайте selector, който връща само това, което компонентът показва.
ОсновиМоят selector връща обект и се пререндерира всеки път.
Нов обект никога не е равен на предишния според Object.is. Подайте shallow като втори аргумент или избирайте полетата поотделно.
ОсновиОбектът се промени, но нищо не се обнови.
set е получил същия обект, затова restate не е видял промяна. Връщайте от set нов обект или масив.
ЗапазванеКъде да изчакам запазените данни?
Веднъж, във входната точка на клиента: изпълнете await restateManager.ready преди рендериране на приложението. Оттам компонентите четат запазените стойности директно. Store в useRestateScope чакат собствения си scope.manager.ready.
ЗапазванеКога данните се записват в хранилището?
Само когато извикате save() или, при включен autoSave, след промени. Редакцията променя паметта; status().dirty показва, че има незапазени промени.
ЗапазванеautoSave или save()?
Използвайте autoSave за настройки и чернови, които винаги трябва да се запазват. Използвайте save(), когато решава потребителят, например с бутон „Запази“ или при изпращане на формуляр. Можете да извиквате save() и при включен autoSave, например при pagehide.
ГрешкиrestateManager.ready е отхвърлен. Какво сега?
Отхвърля се с BULK_OPERATION_FAILED, когато запис не е могъл да се прочете, мигрира или валидира. error.failures изброява всеки store и грешката му. Поправете или изчистете записа, извикайте initialize() на този store и достъпете ready отново.
ГрешкиВиждам QUEUE_FULL или STORAGE_TIMEOUT.
Хранилището е по-бавно от работата, която слагате в опашката. Не извиквайте save() в стегнат цикъл — чакащото запазване и без това взема най-новата стойност — или използвайте autoSave с изчакване. При нужда настройте maxPendingOperations и operationTimeoutMs.
ГрешкиЗакъсняла заявка пише в store след демонтиране.
set() и reset() върху унищожен store се игнорират, както обновяване на състоянието на React след демонтиране. Абонирането хвърля STORE_DESTROYED, а командите към хранилището се отхвърлят.
ScopeМоят store в scope игнорира новите props.
Factory се изпълнява веднъж, както инициализатор на useState. Рендерирайте компонента с key за всеки документ, така че всеки нов документ да получи нов scope.
ScopeКак да избегна несъответствия при хидратация?
Подавайте едни и същи данни от сървъра като props на сървъра и в клиента и създавайте store от тях в useRestateScope. Началната стойност става моментната снимка от сървъра.
ScopeЗащо моят store в scope не е в restateManager.ready?
Запазваните store в scope започват зареждане след commit на притежаващия компонент в клиента. Изчакайте scope.manager.ready в граница за зареждане в този компонент.
ЗапазванеMMKV_UNAVAILABLE в React Native.
Инсталирайте react-native-mmkv и неговите нативни зависимости, после изградете приложението отново. В Expo използвайте development build. Store в паметта работят без MMKV.