Javascript 将动作创建者传递给Redux combinereducer()
我正在考虑在Redux/React应用程序中使用“”模块模式。我认为这种模式将reducer和action创建者都传递给了Redux的Javascript 将动作创建者传递给Redux combinereducer(),javascript,redux,react-redux,Javascript,Redux,React Redux,我正在考虑在Redux/React应用程序中使用“”模块模式。我认为这种模式将reducer和action创建者都传递给了Redux的combinereducer()方法,我想知道为什么会这样。从文件中: // widgets.js // Actions const LOAD = 'my-app/widgets/LOAD'; // Reducer export default function reducer(state = {}, action = {}) { switch (ac
combinereducer()
方法,我想知道为什么会这样。从文件中:
// widgets.js
// Actions
const LOAD = 'my-app/widgets/LOAD';
// Reducer
export default function reducer(state = {}, action = {}) {
switch (action.type) {
// do reducer stuff
default: return state;
}
}
// Action Creators
export function loadWidgets() {
return { type: LOAD };
}
然后结合减速器:
import { combineReducers } from 'redux';
import * as reducers from './ducks/index';
const rootReducer = combineReducers(reducers);
export default rootReducer;
为什么这与传入的操作创建者以及作为combineReducers()
参数的reducer一起工作?函数的签名为:
combineReducers(reducers)
并且说减缩器必须是“其值对应于需要组合成一个的不同减缩函数的对象”。它说,combineReducers()
“将通过向还原程序传递未定义的内容来检查还原程序”,还原程序必须遵循的规则包括“如果给定给它的状态是未定义的
,它必须返回此特定还原程序的初始状态”
在这个测试中,动作创建者显然没有返回初始状态,这种模式(Ducks)在Redux中很流行。我错过了什么?仅使用传入对象的default
方法是否依赖于未记录的行为?这似乎不是Redux文档所建议的行为。“以前的文档建议使用ES6 import*作为reducers语法来获取reducers对象。这是许多混淆的根源,这就是为什么我们现在建议从reducers/index.js导出使用combineReducers()获得的单个reducer。”@对根减速器(以及用于构建根减速器的链)有意义的Héctor。但在我看来,Ducks模式根本不起作用-动作创建者会被称为减缩器(并通过状态
和动作
),然后会失败,因为他们没有返回有效的状态对象。我认为未记录的部分就是“/Ducks/index.js”中的内容,这可能类似于:从“/widgets”导入widgetsReducer代码>导出{widgetsReducer}代码>“以前的文档建议使用ES6 import*作为reducers语法来获取reducers对象。这是许多混乱的根源,这就是为什么我们现在建议从reducers/index.js导出使用combineReducers()获取的单个reducer。”@Héctor对根reducer有意义(和用于构建根减速器的链)。但在我看来,鸭子模式根本不起作用-动作创建者将被称为减速器(并通过状态
和动作
),然后将失败,因为它们没有返回有效的状态对象。我认为未记录的部分是“/ducks/index.js”中的内容,这可能类似于:从“/widgets”导入widgetsReducer;
导出{widgetsReducer};