restate / v1.0.0

Συχνές ερωτήσεις

Απαντήσεις στις πιο συνηθισμένες ερωτήσεις για αποδόσεις, αποθήκευση, scopes και σφάλματα στο restate.

ΒασικάΧρειάζομαι Provider;

Όχι. Ένα store είναι τιμή σε επίπεδο module· οποιοδήποτε component το εισάγει μπορεί να το χρησιμοποιήσει. Χρησιμοποιήστε το useRestateScope όταν η κατάσταση πρέπει να ανήκει σε ένα στιγμιότυπο component.

ΒασικάΓιατί το component μου αποδίδεται σε κάθε αλλαγή;

Η κλήση του hook χωρίς selector κάνει συνδρομή σε ολόκληρη την τιμή. Δώστε έναν selector που επιστρέφει μόνο ό,τι εμφανίζει το component.

ΒασικάΗ συνάρτηση selector μου επιστρέφει αντικείμενο και αποδίδεται κάθε φορά.

Σύμφωνα με το Object.is, ένα νέο αντικείμενο δεν είναι ποτέ ίσο με το προηγούμενο. Δώστε το shallow ως δεύτερο όρισμα ή επιλέξτε τα πεδία ξεχωριστά.

ΒασικάΤο αντικείμενο άλλαξε, αλλά τίποτα δεν ενημερώθηκε.

Το set έλαβε το ίδιο αντικείμενο, οπότε το restate δεν είδε αλλαγή. Επιστρέψτε νέο αντικείμενο ή πίνακα από το set.

ΑποθήκευσηΠού περιμένω τα αποθηκευμένα δεδομένα;

Μία φορά, στο σημείο εισόδου του client: εκτελέστε await restateManager.ready πριν αποδώσετε την εφαρμογή. Από εκεί και πέρα τα components διαβάζουν απευθείας τις αποθηκευμένες τιμές. Τα stores στο useRestateScope περιμένουν το δικό τους scope.manager.ready.

ΑποθήκευσηΠότε γράφονται τα δεδομένα στην αποθήκευση;

Μόνο όταν καλείτε save() ή, με ενεργό autoSave, μετά από αλλαγές. Η επεξεργασία αλλάζει τη μνήμη· το status().dirty λέει ότι υπάρχουν μη αποθηκευμένες αλλαγές.

ΑποθήκευσηautoSave ή save();

Χρησιμοποιήστε autoSave για ρυθμίσεις και πρόχειρα που πρέπει πάντα να αποθηκεύονται. Χρησιμοποιήστε save() όταν αποφασίζει ο χρήστης, όπως με ένα κουμπί Αποθήκευση ή την υποβολή φόρμας. Μπορείτε να καλέσετε save() και με ενεργό autoSave, για παράδειγμα στο pagehide.

ΑποθήκευσηΗ αποθήκευση αποτυγχάνει σε ιδιωτικό παράθυρο ή κατά το SSR.

Όταν η αποθήκευση δεν είναι διαθέσιμη, το store συνεχίζει να τρέχει στη μνήμη, το status().available είναι false και το save() απορρίπτεται με STORAGE_UNAVAILABLE. Η εκκίνηση πετυχαίνει κανονικά.

ΣφάλματαΤο restateManager.ready απορρίφθηκε. Τι κάνω τώρα;

Απορρίπτεται με BULK_OPERATION_FAILED όταν μια εγγραφή δεν μπόρεσε να διαβαστεί, να μεταφερθεί ή να επικυρωθεί. Το error.failures απαριθμεί κάθε store και το σφάλμα του. Διορθώστε ή καθαρίστε την εγγραφή, καλέστε το initialize() εκείνου του store και αποκτήστε ξανά πρόσβαση στο ready.

ΣφάλματαΒλέπω QUEUE_FULL ή STORAGE_TIMEOUT.

Η αποθήκευση είναι πιο αργή από την εργασία που βάζετε στην ουρά. Αποφύγετε την κλήση save() σε σφιχτό βρόχο — μια εκκρεμής αποθήκευση παίρνει ήδη την πιο πρόσφατη τιμή — ή χρησιμοποιήστε autoSave με αναμονή. Προσαρμόστε τα maxPendingOperations και operationTimeoutMs αν χρειάζεται.

ΣφάλματαΈνα αίτημα που αργεί μετά την αποπροσάρτηση γράφει στο store.

Τα set() και reset() σε καταστραμμένο store αγνοούνται, όπως μια ενημέρωση κατάστασης React μετά την αποπροσάρτηση. Η συνδρομή πετά STORE_DESTROYED και οι εντολές αποθήκευσης απορρίπτονται.

ScopesΤο store μου σε scope αγνοεί τα νέα props.

Το factory εκτελείται μία φορά, όπως ένας αρχικοποιητής useState. Αποδώστε το component με key ανά έγγραφο, ώστε κάθε νέο έγγραφο να παίρνει νέο scope.

ScopesΠώς αποφεύγω αναντιστοιχίες hydration;

Περάστε τα ίδια δεδομένα διακομιστή ως props στον διακομιστή και στον client και δημιουργήστε από αυτά το store στο useRestateScope. Η αρχική τιμή γίνεται το στιγμιότυπο του διακομιστή.

ScopesΓιατί το store μου σε scope δεν είναι στο restateManager.ready;

Τα αποθηκευμένα stores σε scope ξεκινούν να φορτώνουν όταν το component-κάτοχος κάνει commit στον client. Περιμένετε το scope.manager.ready μέσα σε ένα όριο φόρτωσης σε εκείνο το component.

ΑποθήκευσηMMKV_UNAVAILABLE στο React Native.

Εγκαταστήστε το react-native-mmkv και τις native εξαρτήσεις του και κάντε ξανά build την εφαρμογή. Στο Expo, χρησιμοποιήστε development build. Τα stores στη μνήμη λειτουργούν χωρίς MMKV.

Αναζήτηση στην τεκμηρίωση

Αναζήτηση σε τίτλους, περιγραφές και περιεχόμενο όλων των οδηγών.