restate / v1.0.0

Pogosta vprašanja

Odgovori na najpogostejša vprašanja o upodabljanju, shranjevanju, scopih in napakah v restate.

OsnoveAli potrebujem Provider?

Ne. Store je vrednost na ravni modula; uporabi ga lahko vsaka komponenta, ki ga uvozi. Uporabite useRestateScope, ko mora stanje pripadati primerku komponente.

OsnoveZakaj se moja komponenta upodobi ob vsaki spremembi?

Klic hooka brez selector naroči na celotno vrednost. Podajte selector, ki vrne le tisto, kar komponenta prikazuje.

OsnoveMoj selector vrne objekt in se upodobi vsakič.

Nov objekt po Object.is nikoli ni enak prejšnjemu. Podajte shallow kot drugi argument ali polja izberite ločeno.

OsnoveObjekt se je spremenil, a nič se ni posodobilo.

set je dobil isti objekt, zato restate ni videl spremembe. Iz set vrnite nov objekt ali polje.

ShranjevanjeKje naj počakam na shranjene podatke?

Enkrat, v vstopni točki odjemalca: pred upodabljanjem aplikacije izvedite await restateManager.ready. Od tam komponente neposredno berejo shranjene vrednosti. Storeji v useRestateScope čakajo na svoj scope.manager.ready.

ShranjevanjeKdaj se podatki zapišejo v shrambo?

Le ko pokličete save() ali, ko je vklopljen autoSave, po spremembah. Urejanje spremeni pomnilnik; status().dirty pove, da obstajajo neshranjene spremembe.

ShranjevanjeautoSave ali save()?

autoSave uporabljajte za nastavitve in osnutke, ki se morajo vedno shraniti. save() uporabite, ko odloča uporabnik, na primer z gumbom Shrani ali oddajo obrazca. save() lahko pokličete tudi pri vklopljenem autoSave, na primer ob pagehide.

ShranjevanjeShranjevanje ne uspe v zasebnem oknu ali med SSR.

Ko shramba ni na voljo, store še naprej deluje v pomnilniku, status().available je false, save() pa se zavrne s STORAGE_UNAVAILABLE. Zagon kljub temu uspe.

NapakerestateManager.ready je bil zavrnjen. Kaj zdaj?

Zavrne se z BULK_OPERATION_FAILED, ko zapisa ni bilo mogoče prebrati, migrirati ali preveriti. error.failures našteje vsak store in njegovo napako. Popravite ali počistite zapis, pokličite initialize() tega storea in znova dostopite do ready.

NapakeVidim QUEUE_FULL ali STORAGE_TIMEOUT.

Shramba je počasnejša od dela, ki ga postavljate v vrsto. Izogibajte se klicanju save() v tesni zanki — čakajoče shranjevanje že vzame najnovejšo vrednost — ali uporabite autoSave s čakanjem. Po potrebi prilagodite maxPendingOperations in operationTimeoutMs.

NapakeZapoznela zahteva po odklopu piše v store.

set() in reset() na uničenem storeu se prezreta, tako kot posodobitev stanja Reacta po odklopu. Naročnina vrže STORE_DESTROYED, ukazi shrambe pa se zavrnejo.

ScopiMoj store v scopu prezre nove props.

Factory se izvede enkrat, kot inicializator useState. Komponento upodobite s key za vsak dokument, da vsak nov dokument dobi nov scope.

ScopiKako se izognem neujemanju pri hidraciji?

Na strežniku in odjemalcu podajte iste podatke s strežnika kot props in iz njih ustvarite store v useRestateScope. Začetna vrednost postane posnetek s strežnika.

ScopiZakaj mojega storea v scopu ni v restateManager.ready?

Shranjeni storeji v scopu začnejo nalaganje, ko se komponenta lastnica na odjemalcu potrdi (commit). Počakajte na scope.manager.ready znotraj meje nalaganja v tej komponenti.

ShranjevanjeMMKV_UNAVAILABLE v React Nativu.

Namestite react-native-mmkv in njegove domorodne odvisnosti, nato aplikacijo zgradite znova. V Expu uporabite development build. Storeji v pomnilniku delujejo brez MMKV.

Iskanje po dokumentaciji

Iščite po naslovih, opisih in besedilu vseh vodnikov.