在Redux应用程序中写入localStorage的位置?
我想坚持我的状态树的一些部分到localStorage。 什么是适当的地方这样做? 减速机还是行动?
减速机永远不是一个合适的地方,因为减速机应该是纯净的,没有副作用。
我会build议只是在一个用户做:
store.subscribe(() => { // persist your state })
在创build商店之前,阅读这些持久部分:
const persistedState = // ... const store = createStore(reducer, persistedState)
如果你使用combineReducers()
你会注意到还没有收到状态的减速器会像使用它们的默认state
参数值一样“正常启动”。 这可以非常方便。
build议您删除订阅者,以免写入localStorage过快,否则会出现性能问题。
最后,您可以创build一个中间件,将其作为一种替代scheme进行封装,但是我会从订阅者开始,因为这是一个更简单的解决scheme,并且可以很好地完成这项工作。
要填补Dan Abramov的答案空白,你可以使用store.subscribe()
像这样:
store.subscribe(()=>{ localStorage.setItem('reduxState', JSON.stringify(store.getState())) })
在创build商店之前,请检查localStorage
并parsing您的密钥下的任何JSON,如下所示:
const persistedState = localStorage.getItem('reduxState') ? JSON.parse(localStorage.getItem('reduxState')) : {}
然后,将这个peristedState
常量传递给您的createStore
方法,如下所示:
const store = createStore( reducer, persistedState, /* any middleware... */ )
总之:中间件。
检查减less持续 。 或者写你自己的。
[更新2016年12月18日]编辑删除提及两个类似的项目,现在不活跃或不赞成。