restate / v1.0.0
Często zadawane pytania
Odpowiedzi na najczęstsze pytania o renderowanie, zapis, zakresy i błędy w restate.
Brak pasujących pytań
Spróbuj innego słowa lub pokaż wszystkie pytania.
PodstawyCzy potrzebuję Providera?
Nie. Magazyn to wartość na poziomie modułu; może go używać każdy komponent, który go importuje. Użyj useRestateScope, gdy stan ma należeć do instancji komponentu.
PodstawyDlaczego mój komponent renderuje się przy każdej zmianie?
Wywołanie hooka bez selector subskrybuje całą wartość. Przekaż selector, który zwraca tylko to, co komponent pokazuje.
PodstawyMój selector zwraca obiekt i renderuje się za każdym razem.
Nowy obiekt nigdy nie jest równy poprzedniemu według Object.is. Przekaż shallow jako drugi argument lub wybieraj pola osobno.
PodstawyObiekt się zmienił, ale nic się nie zaktualizowało.
set dostał ten sam obiekt, więc restate nie zobaczył zmiany. Zwracaj z set nowy obiekt lub tablicę.
ZapisGdzie czekać na zapisane dane?
Raz, w punkcie wejścia klienta: wykonaj await restateManager.ready przed renderem aplikacji. Od tej chwili komponenty czytają zapisane wartości bezpośrednio. Magazyny w useRestateScope czekają na własny scope.manager.ready.
ZapisKiedy dane trafiają do pamięci trwałej?
Tylko gdy wywołasz save() lub, przy włączonym autoSave, po zmianach. Edycja zmienia pamięć; status().dirty mówi, że są niezapisane zmiany.
ZapisautoSave czy save()?
Używaj autoSave dla ustawień i szkiców, które zawsze mają się zapisywać. Używaj save(), gdy decyduje użytkownik, na przykład przyciskiem Zapisz lub wysłaniem formularza. save() możesz wywołać także przy włączonym autoSave, na przykład w pagehide.
BłędyrestateManager.ready zostało odrzucone. Co teraz?
Jest odrzucane z BULK_OPERATION_FAILED, gdy rekordu nie dało się odczytać, zmigrować lub zwalidować. error.failures wymienia każdy magazyn i jego błąd. Napraw lub wyczyść rekord, wywołaj initialize() tego magazynu i ponownie odwołaj się do ready.
BłędyWidzę QUEUE_FULL lub STORAGE_TIMEOUT.
Pamięć jest wolniejsza niż praca, którą wrzucasz do kolejki. Nie wywołuj save() w ciasnej pętli — oczekujący zapis i tak bierze najnowszą wartość — albo użyj autoSave z oczekiwaniem. W razie potrzeby dostosuj maxPendingOperations i operationTimeoutMs.
BłędySpóźnione żądanie zapisuje do magazynu po odmontowaniu.
set() i reset() na zniszczonym magazynie są ignorowane, jak aktualizacja stanu React po odmontowaniu. Subskrypcja rzuca STORE_DESTROYED, a polecenia pamięci są odrzucane.
ZakresyMój magazyn w zakresie ignoruje nowe props.
Fabryka uruchamia się raz, jak inicjalizator useState. Renderuj komponent z key dla każdego dokumentu, by każdy nowy dokument dostał nowy zakres.
ZakresyJak uniknąć niezgodności hydratacji?
Przekazuj te same dane serwera jako props na serwerze i w kliencie i twórz z nich magazyn w useRestateScope. Wartość początkowa staje się migawką serwera.
ZakresyDlaczego mojego magazynu z zakresu nie ma w restateManager.ready?
Zapisywane magazyny w zakresie zaczynają wczytywanie po zatwierdzeniu komponentu-właściciela po stronie klienta. Poczekaj na scope.manager.ready wewnątrz granicy ładowania w tym komponencie.
ZapisMMKV_UNAVAILABLE w React Native.
Zainstaluj react-native-mmkv i jego natywne zależności, a potem przebuduj aplikację. W Expo użyj development build. Magazyny w pamięci działają bez MMKV.