restate / v1.0.0
Gyakori kérdések
Válaszok a restate renderelésével, mentésével, scope-jaival és hibáival kapcsolatos leggyakoribb kérdésekre.
Nincs egyező kérdés
Próbáljon másik kifejezést, vagy jelenítse meg az összes kérdést.
AlapokSzükségem van Providerre?
Nem. A store modulszintű érték; bármelyik komponens használhatja, amely importálja. Használja a useRestateScope-ot, ha az állapotnak egy komponenspéldányhoz kell tartoznia.
AlapokMiért renderel a komponensem minden változáskor?
A hook selector nélküli hívása a teljes értékre iratkozik fel. Adjon át egy selectort, amely csak azt adja vissza, amit a komponens megjelenít.
AlapokA selector függvényem objektumot ad vissza, és minden alkalommal renderel.
Az Object.is szerint egy új objektum soha nem egyenlő az előzővel. Adja meg második argumentumként a shallow-t, vagy válassza ki a mezőket külön.
AlapokAz objektum megváltozott, de semmi sem frissült.
A set ugyanazt az objektumot kapta, így a restate nem látott változást. Adjon vissza új objektumot vagy tömböt a set-ből.
MentésHol várjak a mentett adatokra?
Egyszer, a kliens belépési pontján: futtassa az await restateManager.ready lépést az alkalmazás renderelése előtt. Onnantól a komponensek közvetlenül olvassák a mentett értékeket. A useRestateScope-ban lévő store-ok a saját scope.manager.ready-jükre várnak.
MentésMikor íródnak ki az adatok a tárolóba?
Csak akkor, ha meghívja a save() metódust, vagy bekapcsolt autoSave esetén a változások után. A szerkesztés a memóriát módosítja; a status().dirty jelzi, hogy vannak nem mentett változások.
MentésautoSave vagy save()?
Használja az autoSave-et olyan beállításokhoz és piszkozatokhoz, amelyeket mindig menteni kell. A save()-et akkor használja, amikor a felhasználó dönt, például egy Mentés gombbal vagy egy űrlap elküldésével. Bekapcsolt autoSave mellett is meghívhatja a save() metódust, például pagehide eseménykor.
HibákA restateManager.ready elutasult. Mi a teendő?
BULK_OPERATION_FAILED hibával utasul el, ha egy rekordot nem lehetett beolvasni, migrálni vagy ellenőrizni. Az error.failures felsorol minden store-t és annak hibáját. Javítsa vagy törölje a rekordot, hívja meg az adott store initialize() metódusát, és érje el újra a ready-t.
HibákQUEUE_FULL vagy STORAGE_TIMEOUT hibát látok.
A tároló lassabb, mint a sorba állított munka. Kerülje a save() szoros ciklusban való hívását — a függő mentés már a legújabb értéket veszi át —, vagy használjon várakozó autoSave-et. Szükség esetén módosítsa a maxPendingOperations és az operationTimeoutMs értékét.
HibákEgy leválasztás után későn érkező kérés ír a store-ba.
A megsemmisített store-on a set() és a reset() hatástalan, mint egy React-állapotfrissítés leválasztás után. A feliratkozás STORE_DESTROYED hibát dob, a tárolóparancsok pedig elutasulnak.
Scope-okA scope-os store-om figyelmen kívül hagyja az új props-ot.
A factory egyszer fut, mint a useState inicializálója. Renderelje a komponenst dokumentumonkénti key-jel, hogy minden új dokumentum új scope-ot kapjon.
Scope-okHogyan kerülhetem el a hidratálási eltéréseket?
Adja át ugyanazokat a szerveradatokat props-ként a szerveren és a kliensen, és ezekből hozza létre a store-t a useRestateScope-ban. A kezdőérték lesz a szerver pillanatképe.
Scope-okMiért nincs a scope-os store-om a restateManager.ready-ben?
A scope-ban lévő mentett store-ok akkor kezdik a betöltést, amikor a tulajdonos komponens commitol a kliensen. Várjon a scope.manager.ready-re egy betöltési határon belül abban a komponensben.
MentésMMKV_UNAVAILABLE React Native alatt.
Telepítse a react-native-mmkv csomagot és natív függőségeit, majd buildelje újra az alkalmazást. Expóban használjon development buildet. A memóriabeli store-ok MMKV nélkül is működnek.