restate / v1.0.0
Întrebări frecvente
Răspunsuri la cele mai frecvente întrebări despre randare, salvare, scope-uri și erori în restate.
Nicio întrebare potrivită
Încercați alt termen sau afișați toate întrebările.
Noțiuni de bazăAm nevoie de un Provider?
Nu. Un store este o valoare la nivel de modul; orice componentă care îl importă îl poate folosi. Folosiți useRestateScope când starea trebuie să aparțină unei instanțe de componentă.
Noțiuni de bazăDe ce se randează componenta mea la fiecare schimbare?
Apelarea hook-ului fără selector abonează la întreaga valoare. Dați un selector care returnează doar ce afișează componenta.
Noțiuni de bazăFuncția selector returnează un obiect și se randează de fiecare dată.
Un obiect nou nu este niciodată egal cu cel anterior după Object.is. Dați shallow ca al doilea argument sau selectați câmpurile separat.
Noțiuni de bazăObiectul s-a schimbat, dar nu s-a actualizat nimic.
set a primit același obiect, așa că restate nu a văzut nicio schimbare. Returnați un obiect sau un tablou nou din set.
SalvareUnde aștept datele salvate?
O singură dată, în punctul de intrare de pe client: rulați await restateManager.ready înainte de a randa aplicația. De acolo, componentele citesc direct valorile salvate. Store-urile din useRestateScope își așteaptă propriul scope.manager.ready.
SalvareCând se scriu datele în stocare?
Doar când apelați save() sau, cu autoSave activat, după modificări. Editarea schimbă memoria; status().dirty spune că există modificări nesalvate.
SalvareautoSave sau save()?
Folosiți autoSave pentru setări și ciorne care trebuie mereu salvate. Folosiți save() când decide utilizatorul, de exemplu cu un buton Salvează sau la trimiterea unui formular. Puteți apela save() și cu autoSave activat, de exemplu la pagehide.
ErorirestateManager.ready a fost respins. Ce urmează?
Este respins cu BULK_OPERATION_FAILED când o înregistrare nu a putut fi citită, migrată sau validată. error.failures listează fiecare store și eroarea lui. Reparați sau goliți înregistrarea, apelați initialize() pe acel store și accesați din nou ready.
EroriVăd QUEUE_FULL sau STORAGE_TIMEOUT.
Stocarea este mai lentă decât lucrul pe care îl puneți în coadă. Evitați apelarea save() într-o buclă strânsă — o salvare în așteptare preia deja cea mai nouă valoare — sau folosiți autoSave cu așteptare. Ajustați maxPendingOperations și operationTimeoutMs dacă e nevoie.
EroriO cerere întârziată după demontare scrie în store.
set() și reset() pe un store distrus sunt ignorate, ca o actualizare de stare React după demontare. Abonarea aruncă STORE_DESTROYED, iar comenzile de stocare sunt respinse.
Scope-uriStore-ul meu din scope ignoră props noi.
Factory-ul rulează o singură dată, ca un inițializator useState. Randați componenta cu un key per document, ca fiecare document nou să primească un scope nou.
Scope-uriCum evit nepotrivirile de hidratare?
Transmiteți aceleași date de pe server ca props pe server și pe client și creați store-ul din ele în useRestateScope. Valoarea inițială devine snapshotul serverului.
Scope-uriDe ce store-ul meu din scope nu e în restateManager.ready?
Store-urile salvate dintr-un scope încep încărcarea când componenta proprietară face commit pe client. Așteptați scope.manager.ready într-o limită de încărcare în acea componentă.
SalvareMMKV_UNAVAILABLE în React Native.
Instalați react-native-mmkv și dependențele lui native, apoi reconstruiți aplicația. În Expo folosiți un development build. Store-urile în memorie funcționează fără MMKV.