restate / v1.0.0

คำถามที่พบบ่อย

คำตอบสำหรับคำถามที่พบบ่อยที่สุดเรื่องการเรนเดอร์ การบันทึก scope และข้อผิดพลาดใน restate

พื้นฐานต้องมี Provider ไหม

ไม่ต้อง store เป็นค่าระดับโมดูล คอมโพเนนต์ใดที่ import มันก็ใช้ได้ ใช้ useRestateScope เมื่อ state ต้องเป็นของอินสแตนซ์คอมโพเนนต์หนึ่ง

พื้นฐานทำไมคอมโพเนนต์ของฉันเรนเดอร์ทุกครั้งที่เปลี่ยน

การเรียก hook โดยไม่มี selector คือการสมัครรับทั้งค่า ให้ส่ง selector ที่คืนเฉพาะสิ่งที่คอมโพเนนต์แสดง

พื้นฐานฟังก์ชัน selector ของฉันคืนออบเจกต์และเรนเดอร์ทุกครั้ง

ตาม Object.is ออบเจกต์ใหม่ไม่มีวันเท่ากับออบเจกต์ก่อนหน้า ให้ส่ง shallow เป็นอาร์กิวเมนต์ที่สอง หรือเลือกแต่ละฟิลด์แยกกัน

พื้นฐานออบเจกต์เปลี่ยนแล้ว แต่ไม่มีอะไรอัปเดต

set ได้ออบเจกต์เดิม restate จึงไม่เห็นการเปลี่ยนแปลง ให้คืนออบเจกต์หรืออาร์เรย์ใหม่จาก set

การบันทึกควรรอข้อมูลที่บันทึกไว้ที่ไหน

ครั้งเดียว ที่จุดเริ่มต้นฝั่งไคลเอนต์: รัน await restateManager.ready ก่อนเรนเดอร์แอป จากนั้นคอมโพเนนต์อ่านค่าที่บันทึกไว้ได้โดยตรง ส่วน store ใน 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 หากจำเป็น

ข้อผิดพลาดคำขอที่มาช้าหลัง unmount เขียนลงใน store

set() และ reset() บน store ที่ถูกทำลายจะถูกเพิกเฉย เหมือนการอัปเดต state ของ React หลัง unmount การสมัครรับจะโยน STORE_DESTROYED และคำสั่งของที่จัดเก็บข้อมูลจะถูกปฏิเสธ

Scopestore ใน scope ของฉันไม่สนใจ props ใหม่

factory ทำงานครั้งเดียว เหมือนตัวเริ่มค่าของ useState ให้เรนเดอร์คอมโพเนนต์พร้อม key ต่อเอกสาร เพื่อให้เอกสารใหม่แต่ละฉบับได้ scope ใหม่

Scopeจะหลีกเลี่ยง hydration ไม่ตรงกันได้อย่างไร

ส่งข้อมูลจากเซิร์ฟเวอร์ชุดเดียวกันเป็น props ทั้งฝั่งเซิร์ฟเวอร์และไคลเอนต์ แล้วสร้าง store จากข้อมูลนั้นใน useRestateScope ค่าเริ่มต้นจะกลายเป็นสแนปช็อตจากเซิร์ฟเวอร์

Scopeทำไม store ใน scope ของฉันไม่อยู่ใน restateManager.ready

store แบบบันทึกใน scope จะเริ่มโหลดเมื่อคอมโพเนนต์เจ้าของ commit ฝั่งไคลเอนต์ ให้รอ scope.manager.ready ภายในขอบเขตการโหลดในคอมโพเนนต์นั้น

การบันทึกMMKV_UNAVAILABLE บน React Native

ติดตั้ง react-native-mmkv และ dependency เนทีฟของมัน แล้วบิลด์แอปใหม่ ใน Expo ให้ใช้ development build ส่วน store ในหน่วยความจำทำงานได้โดยไม่ต้องมี MMKV

ค้นหาเอกสาร

ค้นหาในชื่อเรื่อง คำอธิบาย และเนื้อหาของคู่มือทั้งหมด