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

时间:2018-10-22 19:06:16

标签: javascript reactjs dvajs

我如下启动我的dvajs应用。我使用onStateChange钩子将状态存储到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值加载到状态中以使其保持不变?

1 个答案:

答案 0 :(得分:0)

在dva选项上使用initialState代替defaultState。对于将state设置为null的模型,如果要添加任何默认道具,也请使用initialState

修改后的代码

Dva Init

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
     ....
    ....