到目前为止已经有了很好的答案,但让我把蛋糕冰镇一下;也许是为了给你一个深入的分析,这样你就不会只是复制有效的 StackOverflow 代码``` 但不知道你的程序为什么会工作。
有两种主要方法可以完成此即: 1. 使用 createStore 方法。它需要一个可选的第二个参数(preloadedState 值)
const store = createStore(counter) // createStore without preloadedState
const initialState = {} // or in your case:
const initialState = {
initialTodos = [{id:123, text:'hello', completed: false}]
}
const store = createStore(counter, initialState) // create store with preloadedState
如果你createStore
不使用preloadedState
它调用它会初始化state to {}
因此reducers将接收undefined
它们的状态值。这将我们带到了第二种方法。
- 您可以在
reducers
. Reducers
也可以initialState
通过查看传入的state argument (which would be undefined
ifcreateStore
没有被调用来设置initialState
) 并返回他们想用作默认值的值。
const initialState = {} // a common pattern but in your case:
const initialState = {
initialTodos = [{id:123, text:'hello', completed: false}]
}
function todoReducer(state = initialState, action) {
switch (action.type) {
case // your type:
return ...
default:
return state
}
}
方法二的缺点在数据量大的情况下很明显;就像一个巨大的待办事项列表,例如你想作为initialState
“应用程序范围”传递。方法 2 会带来很多重复,因为您必须对所有减速器执行相同的操作。这是主要的缺点。但是当您只想将其设置initialState as {}
为常见模式时,它非常流行。
为了更好地理解,请阅读 4 分钟:https : //dev.to/lawrence_eagles/how-to-properly-set-initial-state-in-redux-78m