我正在查看React-Redux应用程序中的一些代码,发现在Redux存储中存在三个状态,并且对每个状态的更改是由不同的reducer(组合reducer)处理的。类似于以下内容:
src / models
--model1
--model2
--model3
src / reducers / index.js
const rootReducer = combineReducers({
model1Reducer,
model2Reduce,
model3Reducer
})
src / reducers / model1Reducer
// import model1 here
const model1Reducer = (state = model1, action) { }
类似地,model2Reducer和model3Reducer分别导入model2和model3并对其执行操作。
在Redux中定义三种不同状态树的方法可以吗? Redux的原则之一是真理的单一来源。那好吗?
答案 0 :(得分:0)
您在此描述的是使用redux的正确方法,与我们在组织中使用的方法相同。
“单一真理”原则背后的含义是
轻松创建通用应用程序,因为服务器的状态可以序列化 无需额外的编码工作即可将其添加到客户中。
我们使用combinedReducers通过逻辑将应用程序的一部分分开,并避免了reducer在更新商店方面变得复杂的情况。这并不意味着这样做会将商店分为不相关的状态。它们每个都管理商店的独立部分。它“只是”使我们的代码在维护方面更具可读性和模块化。
这是Redux文档的一部分,解释了combinedReducers
的概念随着您的应用程序变得越来越复杂,您需要拆分减少 将功能分为不同的功能,每个功能管理 状态。
combinedReducers帮助器函数可将其值为 可以将不同的归约函数合并为一个归约函数 传递给createStore。
生成的reducer调用每个子级的reducer,并收集它们的 结果成为一个状态对象。
答案 1 :(得分:0)
以下是减速器的规则:
您的getResources()
如下所示:
combineReducers
您的特定减速器将如下所示:
export default combineReducers({
property1: model1Reducer,
property2: model2Reduce,
property3: model3Reducer
}
现在,我上面没有显示的是ES2015语法(export default () => {
return 123;
}
),您可以在其中执行以下操作:
selectedSong = null
这遵循规则1,在该规则中,我们必须返回const selectedSongReducer = (selectedSong = null, action) => {
if (action.type === 'SELECTED_SONG') {
return action.payload;
}
return selectedSong;
}
以外的任何值,因为如果不这样做,则在应用程序启动时我们将得到未定义的值,因此我们实现了ES6 / ES2015中的默认参数值。
它不一定要默认为undefined
,它可以是一个空数组,字符串或对象,具体取决于减速器的上下文。
第二次调用化径器将不再是null
,第一个参数将是上次运行时返回的值。
reducer调用时唯一改变的是操作对象。