javascript - DvaJS - 将保存的状态从 localStorage 加载到状态中

标签 javascript reactjs dvajs

我启动我的 dvajs 应用程序,如下所示。我使用 onStateChange Hook 将状态存储到 localStorage 中。将状态保存到 localstorage 中效果很好。

const app = dva({
    history: createBrowserHistory(),
    defaultState: getPersistedState(),
    onError(e) {
        message.error(e.message, /* duration */3);
    },
    onStateChange(state){
        window.localStorage.setItem('adligence', JSON.stringify(state));
        console.log('state changed', state);
    }
});

现在,当页面刷新时,我想将保存的状态加载到应用程序中。所以我编写了 getPersistedState() 并将持久状态加载到 defaultState 中。在初始加载时加载良好。

但问题是当模型设置状态 Prop 被模型的默认数据替换时。例如,这是我的模型定义之一。

export default {

    namespace: 'training',

    state: {
        videos: [],
        current: {}
    }, ....
    ....

所有加载的初始持久数据都将被此模型替换。那么,如何正确地将 localstorage 值加载到状态中以使其保持不变?

最佳答案

在 dva 选项上使用 initialState 而不是 defaultState。对于模型,将 state 设置为 null,如果您想添加任何默认 Prop ,也请使用 initialState

修改后的代码

Dva 初始化

const app = dva({
    history: createBrowserHistory(),
    initialState: getPersistedState(),
    onError(e) {
        message.error(e.message, /* duration */3);
    },
    onStateChange(state){
        window.localStorage.setItem('adligence', JSON.stringify(state));
        console.log('state changed', state);
    }
});

型号

export default {

    namespace: 'training',

    initialState: {
        videos: [],
        current: {}
    },
    state: null
     ....
    ....

关于javascript - DvaJS - 将保存的状态从 localStorage 加载到状态中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52936186/

相关文章:

reactjs - 在 REACTJs 项目中使用多个 web.config 文件进行 qa、dev 和 prod

javascript - React Hook useEffect 在添加缺少的依赖项时进入无限循环

javascript - React Router 无法渲染路由

reactjs - 创建一个像 slack 一样的子域,例如: https://someteam. slack.com/在 react JS

javascript - Angular 子组件无法识别输入更改

javascript - jQuery UI 可对动态添加的元素进行排序

javascript - 检测 FLASH 插件崩溃

javascript - 方向感知 3D 立方体动画