Reactjs 如何在Redux中的还原程序之间共享功能?
我有两个减缩器处理我的范围的两个不同部分(维度和示例)。这两种结构代表两种不同类型的对象;但是,它们共享一些功能,例如创建、删除、保存等 这些减速机之间是否有共享功能的最佳实践?我目前正在做类似的事情: 减速器1Reactjs 如何在Redux中的还原程序之间共享功能?,reactjs,redux,reducers,Reactjs,Redux,Reducers,我有两个减缩器处理我的范围的两个不同部分(维度和示例)。这两种结构代表两种不同类型的对象;但是,它们共享一些功能,例如创建、删除、保存等 这些减速机之间是否有共享功能的最佳实践?我目前正在做类似的事情: 减速器1 case ADD_EXAMPLE: const defaultDimension = Immutable.Map({ id: 1, title: Immutable.Map({ value: '', error:"empty", dirty: false})
case ADD_EXAMPLE:
const defaultDimension = Immutable.Map({
id: 1,
title: Immutable.Map({ value: '', error:"empty", dirty: false}),
description: Immutable.Map({ value: '', error:"empty", dirty: false}),
options: Immutable.Map({}),
...
});
return fxAdd(state, defaultDimension);
减速器2
case ADD_EXAMPLE:
const defaultExample = Immutable.Map({
id: 1,
title: Immutable.Map({ value: '', error:"empty", dirty: false}),
description: Immutable.Map({ value: '', error:"empty", dirty: false}),
selections: Immutable.Map({}),
...
});
return fxAdd(state, defaultExample);
减速机公用-从两个减速机调用
export function fxAdd(state, object) {
let lastID = 0;
if (state.size!=0) {
lastID = state.maxBy((obj) => obj.get('id')).get('id');
}
return state.push(object.set('id', lastID+1));
}
考虑到这些操作本质上是相同的,只有默认对象在每种情况下是不同的,因此这似乎有点骇人听闻。更重要的是,;这种方式需要2个动作创建者和2个动作常量 这实际上似乎完全可以接受。正如丹·阿布拉莫夫(Dan Abramov)多次指出的那样,减缩器只是函数,你可以用任何方式分解或组合它们。您的方法似乎非常合理,是分离常见行为的一个很好的例子。您能否将其重构为一个帮助器模块,以满足您对简化程序的需求?我想这就是我目前正在做的。除了我现在所做的以外,还有没有一种正式的方式来做这件事?(即:将公共函数保存在位于reducer文件夹中名为common.js的文件中,并由两个reducer导入这些函数)。