25-আগস্ট -2018 সম্পাদনা করুন
যেমনটি একটি মন্তব্যে বলা হয়েছে। আসল রিডেক্স-স্টোরেজ প্যাকেজটি রিঅ্যাক্ট স্ট্যাকের দিকে সরানো হয়েছে । এই পদ্ধতির এখনও আপনার নিজস্ব রাষ্ট্র পরিচালনার সমাধান বাস্তবায়নের উপর দৃষ্টি নিবদ্ধ করা হয়।
আসল উত্তর
প্রদত্ত উত্তরটি যখন এক পর্যায়ে বৈধ ছিল তখন এটি লক্ষ্য করা গুরুত্বপূর্ণ যে আসল রিডেক্স-স্টোরেজ প্যাকেজটি অবচয় করা হয়েছে এবং এটি আর রক্ষণাবেক্ষণ করা হচ্ছে না ...
প্যাকেজ রিডেক্স-স্টোরেজের মূল লেখক প্রকল্পটিকে হ্রাস করার সিদ্ধান্ত নিয়েছে এবং আর রক্ষণাবেক্ষণ করা হবে না।
এখন, ভবিষ্যতে এই জাতীয় সমস্যা এড়াতে যদি আপনি অন্যান্য প্যাকেজগুলির উপর নির্ভরতা রাখতে না চান তবে আপনার নিজের সমাধানটি রোল করা খুব সহজ।
আপনাকে যা করতে হবে তা হ'ল:
1- এমন একটি ফাংশন তৈরি করুন যা স্টেটটি হাইড্রেট করার জন্য দ্বিতীয় প্যারামিটারের মধ্যে থেকে রাজ্যকে ফেরত দেয় localStorage
এবং তারপরে রাজ্যটিকে createStore
'রডুএক্স' ফাংশনে স্থান দেয়
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());
});
আশা করি এটি কারও সাহায্য করবে
পারফরম্যান্স নোট
যদি আপনার অ্যাপ্লিকেশনটিতে রাজ্যের পরিবর্তনগুলি খুব ঘন ঘন হয় তবে স্থানীয় স্টোরেজে সংরক্ষণ করা আপনার আবেদনের কার্যকারিতা ক্ষতিগ্রস্থ করতে পারে, বিশেষত যদি সিরিয়ালাইজ / ডিসাইরিয়ালাইজ করার জন্য স্টেট অবজেক্ট গ্রাফটি বড় হয়। এইসব ক্ষেত্রে, আপনি debounce করতে চান বা ফাংশন যা ব্যবহার localStorage রাজ্যের সংরক্ষণ রোধ পারে RxJs
, lodash
বা অনুরূপ কিছু।