Я нашел следующее решение.
первопричины:
saveState(store.getState());
вызывается каждый раз, когда получено обновление магазина. В шаблоне запуска приложения есть только загруженный редуктор. Редуктор для элемента счетчика не загружается при инициализации приложения и ленивой загрузке. Поэтому любое сохраненное значение в localStore из последнего сеанса теперь перезаписывается новой функцией saveState только с данными магазина приложений. В этом случае перезаписывают ранее сохраненные данные счетчика пустыми данными. Это приводит к пустым данным после загрузки элемента счетчика и инициализации редуктора.
Решение:
Во время первоначальной загрузки localStore я сохраняю исходный полный localState из последнего сеанса в переменную, подобную этой:
export let initialLocalState:any={};
export const loadState = () => {
try {
let json = localStorage.getItem('__wtt_store__') || '{}';
let state = JSON.parse(json);
//console.log("load local app storage state:"+state.counter.clicks);
if (state) {
initialLocalState=state;
//console.log("Original: "+JSON.stringify(initialLocalState))
return state;
} else {
return undefined; // To use the defaults in the reducers
}
} catch {
console.log("local storage error");
return undefined;
}
}
Теперь, чтобы избежать перезаписи полных данных с помощью раннего вызова saveState, где не все данные могут быть инициализированы, я объединяю весь контент обратно в хранилище перед сохранением:
export const saveState = (state) => {
if (state==null) return;
//ensure that we merge it with the full initial local state received during app start and store creation
//fill up the last session state with lazy new states
var merged = Object.assign({}, initialLocalState, state);
let stringifiedState = JSON.stringify(merged);
//console.log("Saving: "+stringifiedState);
localStorage.setItem('__wtt_store__', stringifiedState);
}
Наконец, я добавил действие в веб-компонент counter.ts для получения начальных данных из localStorage
// load initial data from localStore, if available
store.dispatch(loadfavorite());
Это решение помогает мне придерживаться предложенной структуры компонентов стартового набора PWA с ленивой загрузкой компонентов и редукторов и обеспечивает возможность полного доступа к данным localStorage с последнего сеанса.