scratch3吧 关注:130贴子:629
  • 0回复贴,共1

二次开发笔记(三)

只看楼主收藏回复

需求:
实现 scratch-gui 登录后,每次刷新页面(F5 或强制刷新)都需要重新登录。
分析:
redux 的实质就是: 状态管理(全局变量管理)。刷新页面相当于重新 “实例化” window (document ?)“挂载的”变量自然会在父级对象销毁时丢失。所以要在父级对象销毁(页面刷新)前保存,重建父级对象(页面刷新)后恢复。
实现:
src/lib/app-state-hoc.jsx
...
const loadSession = () => {
try {
// TODO 兼容不支持 localStorage 的情况
const serializedSession = localStorage.getItem('session');
return serializedSession === null ? null : JSON.parse(serializedSession);
} catch (err) {
// ... 错误处理
return null;
}
};
...
initialState = {
locales: initializedLocales,
scratchGui: initializedGui,
session: loadSession() || sessionInitialState // 恢复 session
};
...
// 离开页面前保存 session
window.onbeforeunload = () => {
const state = this.store.getState();
try {
const serializedSession = JSON.stringify(state.session);
localStorage.setItem('session', serializedSession);
} catch (err) {
console.log('保存 state 错误 :>>', err);
}
};


IP属地:湖北1楼2020-05-21 10:39回复