浏览器刷新后Ngrx Store重置。如何使应用程序保持状态?

时间:2017-08-09 09:41:59

标签: angular redux ngrx ngrx-store

我从一个组件发送一个动作

this.store.dispatch({type : STORE_TEAMCREST , payload : team.crestURI});

在我使用

从商店中选择的其他组件中
this.store.select(state => state.table.teamCrest).subscribe(data => this.teamCrest = data);

如果我的应用程序按顺序向后或向前进行,这样可以正常工作,但是一旦我执行了浏览器刷新,状态就会失去它的价值。如何保留它的值,使其适用于浏览器刷新?

1 个答案:

答案 0 :(得分:18)

您的商店有一个subscribe函数,只要调度操作就会调用该函数,并且状态树的某些部分可能已更改。对于一个简单的解决方案,您可以在此处将状态保存到本地存储:

this.store.subscribe(function() {
    localStorage.setItem('state', JSON.stringify(this.store.getState()));
})

Documentation here

请注意,您需要将状态字符串化以将其存储在本地存储

要使用此状态,您需要将本地存储状态localStorage.getItem('state')(如果存在)作为您的reducer中的默认状态。为了实现这一点,我通常有一个辅助函数检查本地存储中是否存在具有键“state”的项,如果存在,则调用JSON.parse值。

默认减速机案例:

default:
        if (retrieveState()) {
            var newState = JSON.parse(retrieveState())          
            return newState
        }
        else {
            return {...whatever your default state is};
        }

在快速浏览之后,似乎确实存在一个应该达到你想要的中间件:https://github.com/btroncone/ngrx-store-localstorage