restate / v1.0.0
Häufige Fragen
Antworten auf häufige Fragen zu Rendern, Speichern, Scopes und Fehlern in restate.
Keine passende Frage
Versuch ein anderes Wort oder zeig alle Fragen an.
GrundlagenBrauche ich einen Provider?
Nein. Ein Store ist ein Wert auf Modulebene; jede Komponente, die ihn importiert, kann ihn nutzen. Nutze useRestateScope, wenn State zu einer einzelnen Komponenteninstanz gehören soll.
GrundlagenWarum rendert meine Komponente bei jeder Änderung?
Ein Hook-Aufruf ohne selector abonniert den ganzen Wert. Übergib einen selector, der nur zurückgibt, was die Komponente anzeigt.
GrundlagenMein selector gibt ein Objekt zurück und rendert jedes Mal.
Ein neues Objekt ist nie per Object.is gleich dem vorherigen. Übergib shallow als zweites Argument oder wähle die Felder einzeln aus.
GrundlagenIch habe ein Objekt geändert, aber nichts wurde aktualisiert.
set hat dasselbe Objekt bekommen, also hat restate keine Änderung gesehen. Gib aus set ein neues Objekt oder Array zurück.
SpeichernWo warte ich auf gespeicherte Daten?
Einmal, am Client-Einstiegspunkt: await restateManager.ready, bevor die App gerendert wird. Danach lesen Komponenten gespeicherte Werte direkt. Stores in einem useRestateScope warten auf ihr eigenes scope.manager.ready.
SpeichernWann werden Daten in den Speicher geschrieben?
Nur wenn du save() aufrufst oder nach Änderungen, wenn autoSave an ist. Bearbeiten ändert den Arbeitsspeicher; status().dirty sagt dir, dass es ungespeicherte Änderungen gibt.
SpeichernautoSave oder save()?
Nutze autoSave für Einstellungen und Entwürfe, die immer erhalten bleiben sollen. Nutze save(), wenn die Person entscheidet, etwa mit einem Speichern-Button oder beim Absenden eines Formulars. Du kannst save() auch bei eingeschaltetem autoSave aufrufen, zum Beispiel bei pagehide.
FehlerrestateManager.ready wurde abgelehnt. Was nun?
Es wird mit BULK_OPERATION_FAILED abgelehnt, wenn ein Datensatz nicht gelesen, migriert oder validiert werden konnte. error.failures nennt jeden Store und seinen Fehler. Repariere oder lösche den Datensatz, ruf initialize() dieses Stores auf und greif dann erneut auf ready zu.
FehlerIch sehe QUEUE_FULL oder STORAGE_TIMEOUT.
Der Speicher ist langsamer als die Arbeit, die du einreihst. Ruf save() nicht in einer engen Schleife auf – ein wartender Speichervorgang übernimmt ohnehin den neuesten Wert – oder nutze autoSave mit Verzögerung. Passe bei Bedarf maxPendingOperations und operationTimeoutMs an.
FehlerEin später Request schreibt nach dem Unmount in einen Store.
set() und reset() auf einem zerstörten Store werden ignoriert, wie ein React-State-Update nach dem Unmount. Abonnieren wirft STORE_DESTROYED, und Speicherbefehle werden abgelehnt.
ScopesMein Store im Scope ignoriert neue Props.
Die Factory läuft einmal, wie ein useState-Initialisierer. Render die Komponente mit einem key pro Dokument, damit ein neues Dokument einen neuen Scope bekommt.
ScopesWie vermeide ich Hydration-Mismatches?
Übergib auf Server und Client dieselben Serverdaten als Props und erstelle daraus den Store in useRestateScope. Der Anfangswert wird zum Server-Snapshot.
ScopesWarum ist mein Store im Scope nicht in restateManager.ready?
Gespeicherte Stores in einem Scope beginnen zu laden, nachdem die besitzende Komponente auf dem Client committet wurde. Warte in einer Lade-Boundary innerhalb dieser Komponente auf scope.manager.ready.
SpeichernMMKV_UNAVAILABLE unter React Native.
Installiere react-native-mmkv und seine nativen Abhängigkeiten und baue die App neu. Nutze in Expo einen development build. Arbeitsspeicher-Stores funktionieren ohne MMKV.