Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 如何在Redux中的还原程序之间共享功能?_Reactjs_Redux_Reducers - Fatal编程技术网

Reactjs 如何在Redux中的还原程序之间共享功能?

Reactjs 如何在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})

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

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

减速器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);
减速器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导入这些函数)。