restate / v1.0.0
שאלות נפוצות
תשובות לשאלות הנפוצות ביותר על רינדור, שמירה, scopes ושגיאות ב־restate.
אין שאלות תואמות
נסו מילה אחרת או הציגו את כל השאלות.
יסודותהאם אני צריך Provider?
לא. מאגר הוא ערך ברמת המודול; כל רכיב שמייבא אותו יכול להשתמש בו. השתמשו ב־useRestateScope כשהמצב צריך להיות שייך למופע של רכיב.
יסודותלמה הרכיב שלי מתרנדר בכל שינוי?
קריאה ל־hook בלי selector נרשמת לערך כולו. העבירו selector שמחזיר רק את מה שהרכיב מציג.
יסודותה־selector שלי מחזיר אובייקט ומתרנדר בכל פעם.
אובייקט חדש לעולם אינו שווה לקודם לפי Object.is. העבירו shallow כארגומנט שני או בחרו שדות בנפרד.
יסודותשיניתי אובייקט אבל שום דבר לא התעדכן.
set קיבל את אותו אובייקט, ולכן restate לא ראה שינוי. החזירו מ־set אובייקט או מערך חדש.
שמירהאיפה ממתינים לנתונים השמורים?
פעם אחת, בנקודת הכניסה של הלקוח: הריצו await restateManager.ready לפני רינדור האפליקציה. מכאן הרכיבים קוראים ערכים שמורים ישירות. מאגרים ב־useRestateScope ממתינים ל־scope.manager.ready שלהם.
שמירהמתי נתונים נכתבים לאחסון?
רק כשקוראים ל־save() או, כש־autoSave פעיל, אחרי שינויים. עריכה משנה את הזיכרון; status().dirty אומר שיש שינויים שלא נשמרו.
שמירהautoSave או save()?
השתמשו ב־autoSave להגדרות ולטיוטות שתמיד צריכות להישמר. השתמשו ב־save() כשהמשתמש מחליט, כמו בכפתור שמירה או בשליחת טופס. אפשר לקרוא ל־save() גם כש־autoSave פעיל, למשל ב־pagehide.
שגיאותrestateManager.ready נדחה. מה עכשיו?
הוא נדחה עם BULK_OPERATION_FAILED כשאי אפשר היה לקרוא, להגר או לאמת רשומה. error.failures מפרט כל מאגר ואת השגיאה שלו. תקנו או נקו את הרשומה, קראו ל־initialize() של אותו מאגר וגשו שוב ל־ready.
שגיאותאני רואה QUEUE_FULL או STORAGE_TIMEOUT.
האחסון איטי יותר מהעבודה שאתם מכניסים לתור. הימנעו מקריאה ל־save() בלולאה צפופה — שמירה ממתינה כבר לוקחת את הערך העדכני — או השתמשו ב־autoSave עם המתנה. אם צריך, כווננו את maxPendingOperations ואת operationTimeoutMs.
שגיאותבקשה מאוחרת כותבת למאגר אחרי ההסרה.
set() ו־reset() על מאגר שהושמד נזנחים, כמו עדכון מצב של React אחרי הסרה. הרשמה זורקת STORE_DESTROYED, ופקודות אחסון נדחות.
Scopesהמאגר עם ה־scope שלי מתעלם מ־props חדשים.
ה־factory רץ פעם אחת, כמו מאתחל של useState. רנדרו את הרכיב עם key לכל מסמך, כך שכל מסמך חדש יקבל scope חדש.
Scopesאיך נמנעים מאי־התאמות ב־hydration?
העבירו את אותם נתוני שרת כ־props בשרת ובלקוח, וצרו מהם את המאגר ב־useRestateScope. הערך ההתחלתי הופך לתמונת המצב של השרת.
Scopesלמה המאגר עם ה־scope שלי לא נמצא ב־restateManager.ready?
מאגרים שמורים ב־scope מתחילים לטעון אחרי שהרכיב הבעלים מתבצע (commit) בצד הלקוח. המתינו ל־scope.manager.ready בתוך גבול טעינה באותו רכיב.
שמירהMMKV_UNAVAILABLE ב־React Native.
התקינו את react-native-mmkv ואת התלויות הנייטיב שלו, ואז בנו מחדש את האפליקציה. ב־Expo השתמשו ב־development build. מאגרים בזיכרון עובדים בלי MMKV.