Jos*_*ose 5 node.js redux react-redux
我用 NodeJS 和 redux 创建了一个玩具示例。我创建了一个这样的商店:
var initialState = {config: defaultConfig, customData: data};
const store = createStore(reducers, initialState)
Run Code Online (Sandbox Code Playgroud)
我确保defaultConfig并data已定义,即我真的在语句之前停止了调试器,我可以确认配置确实存在。但是,在减速器内部,状态是undefined。为什么?!
减速器是:
const configReducer = (config: any, action: any): any =>{
return config;
}
const customData = (customData: any, action: any): any => {
return customData;
}
const reducers = combineReducers({config: configReducer, customData: customDataReducer})
Run Code Online (Sandbox Code Playgroud)
所以我明确地给出了一个初始状态,但 redux 会用undefined.
我知道我可以将初始状态作为减速器中的默认参数,或者使用任何其他解决方法。这不是这里的问题。
问题是:如果我在构建商店时通过初始状态,为什么这不起作用。
此行为特定于combineReducers:
传递给combineReducers 的任何reducer 都必须满足以下规则:
对于任何无法识别的操作,它必须返回作为第一个参数提供给它的状态。
它绝不能返回未定义的。通过早期的 return 语句很容易错误地执行此操作,因此如果您这样做,则 mergeReducers 会抛出异常,而不是让错误在其他地方显现出来。
如果给定的状态未定义,则它必须返回该特定减速器的初始状态。根据前面的规则,初始状态也不能是未定义的。使用 ES6 可选参数语法指定它很方便,但您也可以显式检查第一个参数是否未定义。
对于,最初会调用combineReducers减速器来断言它不会违反这些规则。只有这样它才会被调用。undefinedinitialState
因此initialState旨在用初始值来水合状态,而不是提供默认值。
减速器应该能够处理意外操作(default中的子句switch)的意外状态,在这种情况下,初始值应该强制为除 之外的任何值undefined,例如:
const configReducer = (config: any = null, action: any): any =>{
return config;
}
const customData = (customData: any = null, action: any): any => {
return customData;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6388 次 |
| 最近记录: |