如何在Redux中的reducers之间共享功能?

时间:2016-01-06 21:50:34

标签: reactjs redux reducers

我有两个减速器可以处理我的范围的两个不同部分(尺寸和示例)。这两个构造代表两种不同类型的对象;但是,它们共享一些功能,例如创建,删除,保存等。

这些减速机之间是否存在共享功能的最佳实践?我目前正在做类似的事情:

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个动作常量。

1 个答案:

答案 0 :(得分:1)

这实际上似乎完全可以接受。正如Dan Abramov多次指出的那样,减速器只是功能,你可以按照你想要的方式分解或组合它们。你的方法似乎非常合理,是分裂常见行为的一个很好的例子。