用localStorage数据更新reducer初始状态是一个好习惯吗?

时间:2016-08-08 08:26:45

标签: javascript redux

我有一个初始状态的减速机,工作正常。

const initialState = [items:{
    id: 1,
    text: 'Monday',
},
{   id: 1,
    text: 'Tuesday',
}];

function dayChaged(state = initialState, change) {

..
}

我的应用运行正常。但是,我添加了对本地存储的支持。我想在用户添加新项目时将新项目存储在存储中。当页面刷新/重新加载时,我想将iniTialState设置为iniTialState的值加上localstorage值。目前我在州/减速机课程中添加了这个,但是,我觉得这不是最好的做法。

const storageItems = JSON.parse(localStorage.getItem('items'));
if(storageItems) {
    initialState = { todos: initialState.items.concat(storageItems) };
} 
 function dayChaged(state = initialState, change) {

    ..
    }

它的工作正常,做我想要的。然而,这使减速器复杂化了我的理解。请考虑我的意图,我应该在哪里添加这样的功能,如何在不影响州的可测试性的情况下完全整合它?

1 个答案:

答案 0 :(得分:0)

首先考虑一下你是否真的需要改变你的reducer的initialState,或者你需要的是实际设置整个商店的初始状态(在这种情况下你的个人Reducer的初始状态将被忽略)。

查看createStore函数的签名,它接受初始存储状态作为第二个(可选)参数,从localStorage传递你的状态,你应该是金色的。

https://github.com/reactjs/redux/blob/master/docs/api/createStore.md