到目前为止,已经有了很好的答案,但让我来冰蛋糕吧;也许是为了给你一个深入的分析,这样你就不会只是复制 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
如果您在没有 preloadedState 的情况下调用 createStore,它将初始化 state to {}
因此,reducers 将收到undefined 作为它们的状态值。
这就引出了第二种方法。
- 您可以将其设置为
reducers。 Reducers 也可以通过查看传入的 state argument (which would be undefined(如果 createStore 未使用 initialState 调用)并返回他们希望用作默认值的值来设置 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
}
}
方法2的缺点在数据量很大的情况下很明显;就像一个巨大的待办事项列表,例如你想作为initialState“app-wide”传递。方法 2 会带来很多重复,因为您必须在所有 reducer 上做同样的事情。这是主要缺点。但是当您只想设置initialState as {} 时,它很受欢迎,这是一种常见的模式。
为了更好地理解,请阅读 4 分钟:https://dev.to/lawrence_eagles/how-to-properly-set-initial-state-in-redux-78m