我有两个减速器可以处理我的范围的两个不同部分(尺寸和示例)。这两个构造代表两种不同类型的对象;但是,它们共享一些功能,例如创建,删除,保存等。
这些减速机之间是否存在共享功能的最佳实践?我目前正在做类似的事情:
Reducer 1
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);
Reducer 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);
Reducer Common - 从两个reducer调用。
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));
}
考虑到这些操作本质上是相同的,只有默认对象在每种情况下都不同,这看起来有点像hacky。更重要的是;这种方式需要2个动作创建者,2个动作常量。
答案 0 :(得分:1)
这实际上似乎完全可以接受。正如Dan Abramov多次指出的那样,减速器只是功能,你可以按照你想要的方式分解或组合它们。你的方法似乎非常合理,是分裂常见行为的一个很好的例子。