แก้ไข 25 ส.ค. 2562
ตามที่ระบุไว้ในหนึ่งในความคิดเห็น. เดิมRedux จัดเก็บแพคเกจได้ถูกย้ายไปทำปฏิกิริยากอง แนวทางนี้ยังคงมุ่งเน้นไปที่การนำโซลูชันการจัดการของรัฐของคุณไปใช้
คำตอบเดิม
ในขณะที่คำตอบที่ให้มานั้นใช้ได้ในบางจุดสิ่งสำคัญคือต้องสังเกตว่าแพคเกจพื้นที่เก็บข้อมูลสำรองดั้งเดิมได้เลิกใช้แล้วและไม่ได้รับการดูแลอีกต่อไป
ผู้เขียนเดิมของแพ็กเกจที่เก็บข้อมูลสำรองได้ตัดสินใจที่จะเลิกใช้งานโครงการและไม่ได้รับการดูแลอีกต่อไป
ตอนนี้หากคุณไม่ต้องการพึ่งพาแพ็กเกจอื่น ๆ เพื่อหลีกเลี่ยงปัญหาเช่นนี้ในอนาคตคุณสามารถม้วนโซลูชันของคุณเองได้ง่ายมาก
สิ่งที่คุณต้องทำคือ:
1- สร้างฟังก์ชันที่ส่งคืนสถานะจากlocalStorage
นั้นส่งผ่านสถานะไปยังcreateStore
ฟังก์ชัน redux ในพารามิเตอร์ที่สองเพื่อให้ความชุ่มชื้นแก่ร้านค้า
const store = createStore(appReducers, state);
2- รับฟังการเปลี่ยนแปลงสถานะและทุกครั้งที่สถานะเปลี่ยนบันทึกสถานะเป็น localStorage
store.subscribe(() => {
saveState(store.getState());
});
และนั่นแหล่ะ ... ฉันใช้สิ่งที่คล้ายกันในการผลิตจริง ๆ แต่แทนที่จะใช้ฟังก์ชันฉันเขียนคลาสง่ายๆดังต่อไปนี้
class StateLoader {
loadState() {
try {
let serializedState = localStorage.getItem("http://contoso.com:state");
if (serializedState === null) {
return this.initializeState();
}
return JSON.parse(serializedState);
}
catch (err) {
return this.initializeState();
}
}
saveState(state) {
try {
let serializedState = JSON.stringify(state);
localStorage.setItem("http://contoso.com:state", serializedState);
}
catch (err) {
}
}
initializeState() {
return {
}
};
}
}
แล้วเมื่อบูตเครื่องแอปของคุณ ...
import StateLoader from "./state.loader"
const stateLoader = new StateLoader();
let store = createStore(appReducers, stateLoader.loadState());
store.subscribe(() => {
stateLoader.saveState(store.getState());
});
หวังว่ามันจะช่วยใครสักคน
หมายเหตุประสิทธิภาพ
หากแอปพลิเคชันของคุณมีการเปลี่ยนแปลงสถานะบ่อยมากการบันทึกลงในพื้นที่จัดเก็บในตัวเครื่องบ่อยเกินไปอาจส่งผลกระทบต่อประสิทธิภาพของแอปพลิเคชันของคุณโดยเฉพาะอย่างยิ่งหากกราฟสถานะของวัตถุที่จะทำให้เป็นอนุกรม / deserialize มีขนาดใหญ่ สำหรับกรณีนี้คุณอาจต้องการที่จะ debounce หรือเค้นฟังก์ชั่นที่ช่วยประหยัดของรัฐเพื่อ localStorage ใช้RxJs
, lodash
หรือสิ่งที่คล้ายกัน