迄今为止已经有很好的答案了,但让我来点缀一下;也许给你一个深入的分析,这样你就不只是复制那些可用但不知道为什么程序可以工作的StackOverflow代码。
有两种主要的方法可以实现这个目标,即:
1. 使用createStore方法。它接受一个可选的第二个参数(预加载状态值)。
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为 {}
。 因此,reducers将收到undefined
作为它们的状态值。 这就引出了第二种方法。
- 您可以在
reducers
中设置initialState
。通过查看传入的state参数(如果没有使用initialState
调用createStore
,则该参数将为undefined
)并返回想要用作默认值的值来设置initialState
。
const initialState = {}
const initialState = {
initialTodos = [{id:123, text:'hello', completed: false}]
}
function todoReducer(state = initialState, action) {
switch (action.type) {
case
return ...
default:
return state
}
}
方法2的缺点在于当数据非常庞大时,比如一个巨大的待办事项列表需要作为“全局应用程序”传递给
initialState
。方法2将带来很多重复性工作,因为您必须在所有的Reducer中都执行相同的操作。这是主要的缺点。但是当你只想设置
initialState as {}
时,它是一种常见的模式。
这里有一篇4分钟阅读的文章,以便更好地理解:https://dev.to/lawrence_eagles/how-to-properly-set-initial-state-in-redux-78m
createStore
,那么状态将不会被正确设置。 - lazy.lizard