0

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. 在初始加载时加载良好。

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

export default {

    namespace: 'training',

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

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

4

1 回答 1

1

使用initialState而不是defaultStatedva 选项。state对于设置为的模型null,如果您想添加任何默认道具,也可以使用initialState

修改后的代码

初始化

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
     ....
    ....
于 2018-10-22T21:06:34.967 回答