restate / v1.0.0
Domande frequenti
Risposte alle domande più comuni su rendering, salvataggio, scope ed errori in restate.
Nessuna domanda corrispondente
Prova con un’altra parola o mostra tutte le domande.
BasiMi serve un Provider?
No. Uno store è un valore a livello di modulo; qualsiasi componente che lo importa può usarlo. Usa useRestateScope quando lo stato deve appartenere a un’istanza di componente.
BasiPerché il mio componente si renderizza a ogni modifica?
Chiamare l’hook senza selector iscrive all’intero valore. Passa un selector che restituisca solo ciò che il componente mostra.
BasiIl mio selector restituisce un oggetto e si renderizza ogni volta.
Un oggetto nuovo non è mai uguale al precedente per Object.is. Passa shallow come secondo argomento o seleziona i campi separatamente.
BasiHo cambiato un oggetto ma non si è aggiornato nulla.
set ha ricevuto lo stesso oggetto, quindi restate non ha visto cambiamenti. Restituisci da set un nuovo oggetto o array.
SalvataggioDove attendo i dati salvati?
Una volta, nell’entry point del client: esegui await restateManager.ready prima di renderizzare l’app. Da lì i componenti leggono direttamente i valori salvati. Gli store in un useRestateScope attendono il proprio scope.manager.ready.
SalvataggioQuando vengono scritti i dati nell’archivio?
Solo quando chiami save() o, con autoSave attivo, dopo le modifiche. Modificare cambia la memoria; status().dirty ti dice che ci sono modifiche non salvate.
SalvataggioMeglio autoSave o save()?
Usa autoSave per impostazioni e bozze che devono sempre persistere. Usa save() quando decide l’utente, come con un pulsante Salva o l’invio di un modulo. Puoi chiamare save() anche con autoSave attivo, per esempio su pagehide.
ErrorirestateManager.ready è stato rifiutato. E adesso?
Viene rifiutato con BULK_OPERATION_FAILED quando un record non si è potuto leggere, migrare o validare. error.failures indica ogni store e il suo errore. Correggi o svuota il record, chiama initialize() di quello store e accedi di nuovo a ready.
ErroriVedo QUEUE_FULL o STORAGE_TIMEOUT.
L’archivio è più lento del lavoro che metti in coda. Evita di chiamare save() in un ciclo stretto — un salvataggio in attesa prende già il valore più recente — oppure usa autoSave con un’attesa. Se serve, regola maxPendingOperations e operationTimeoutMs.
ErroriUna richiesta in ritardo scrive in uno store dopo lo smontaggio.
set() e reset() su uno store distrutto vengono ignorati, come un aggiornamento di stato di React dopo lo smontaggio. L’iscrizione lancia STORE_DESTROYED e i comandi di archiviazione vengono rifiutati.
ScopeIl mio store con scope ignora le nuove props.
La factory viene eseguita una volta, come un inizializzatore di useState. Renderizza il componente con una key per documento, così ogni nuovo documento ha un nuovo scope.
ScopeCome evito le discrepanze di idratazione?
Passa gli stessi dati del server come props sul server e sul client, e crea lo store da quelli in useRestateScope. Il valore iniziale diventa lo snapshot del server.
ScopePerché il mio store con scope non è in restateManager.ready?
Gli store salvati in uno scope iniziano a caricare dopo il commit del componente proprietario sul client. Attendi scope.manager.ready in un boundary di caricamento dentro quel componente.
SalvataggioMMKV_UNAVAILABLE su React Native.
Installa react-native-mmkv e le sue dipendenze native, poi ricompila l’app. In Expo usa una development build. Gli store in memoria funzionano senza MMKV.