Edit 25 Agustus 2019
Seperti yang tertera di salah satu komentar. Paket penyimpanan redux asli telah dipindahkan ke react-stack . Pendekatan ini masih berfokus pada penerapan solusi pengelolaan negara Anda sendiri.
Jawaban Asli
Meskipun jawaban yang diberikan valid di beberapa titik, penting untuk diperhatikan bahwa paket penyimpanan redux asli telah usang dan tidak lagi dipertahankan ...
Penulis asli paket redux-storage telah memutuskan untuk menghentikan proyek dan tidak lagi dipertahankan.
Sekarang, jika Anda tidak ingin memiliki ketergantungan pada paket lain untuk menghindari masalah seperti ini di masa mendatang, sangat mudah untuk menggulung solusi Anda sendiri.
Yang perlu Anda lakukan hanyalah:
1- Buat fungsi yang mengembalikan status dari localStorage
dan kemudian meneruskan status ke createStore
fungsi reduks di parameter kedua untuk menghidrasi penyimpanan
const store = createStore(appReducers, state);
2- Dengarkan perubahan status dan setiap kali status berubah, simpan status ke localStorage
store.subscribe(() => {
saveState(store.getState());
});
Dan hanya itu ... Saya sebenarnya menggunakan sesuatu yang serupa dalam produksi, tetapi alih-alih menggunakan fungsi, saya menulis kelas yang sangat sederhana seperti di bawah ini ...
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 {
}
};
}
}
dan kemudian saat melakukan bootstrap aplikasi Anda ...
import StateLoader from "./state.loader"
const stateLoader = new StateLoader();
let store = createStore(appReducers, stateLoader.loadState());
store.subscribe(() => {
stateLoader.saveState(store.getState());
});
Semoga bisa membantu seseorang
Catatan Kinerja
Jika perubahan status sangat sering terjadi dalam aplikasi Anda, menyimpan ke penyimpanan lokal terlalu sering dapat merusak kinerja aplikasi Anda, terutama jika grafik objek status untuk membuat serial / deserialisasi besar. Untuk kasus ini, Anda mungkin ingin membatalkan atau membatasi fungsi yang menyimpan status ke localStorage menggunakan RxJs
, lodash
atau yang serupa.