组合减速器的动作类型相同

时间:2019-11-20 22:50:10

标签: reactjs react-redux

我是React的新手,只是关于Reducers的一个问题。下面是一本书中的一些示例代码:

export default createStore(combineReducers(
{
    modelData: ReducerOne,
    stateData: ReducerTwo
 }));

书上写着:

每个化简器都在数据存储的单独部分上运行,但是在处理动作时,每个化简器都会传递动作,直到其中一个返回一个新的数据存储对象,表明该动作已被处理。

以下是我的问题:

Q1。假设有一个动作,该动作类型称为“更新”,只有ReducerTwo处理此动作类型。这是否意味着ReducerOne仍将首先被调用,然后ReducerTwo被调用?如果是的话,这是没有效率的,不是吗? image有很多化简器,其中大多数不处理相关类型的化简器会被调用,直到调用正确的化简器为止。

Q2。这是否意味着所有减速器中的动作类型必须唯一?例如,ReducerTwo处理“ Update”操作类型,因此ReducerOne无法处理“ Update”,我们必须将名称修改为“ Update_One”吗?每次添加新的化简器时,我们都需要检查所有现有的化简器,以查看动作类型的名称是否重复,这是一个乏味且容易出错的过程?

1 个答案:

答案 0 :(得分:0)

这是一个减速器的示例:

export default (state=INIT_STATE, action) => {
  switch(action.type) {
    case CRUD_CREATE_SUCCESS: {
      return {
        ...state,
        alertMessage: 'Registro creado correctamente.',
        showMessage: true,
        currentPage: 0,
        selectedItem: null
      }
    }
    case CRUD_DELETE_SUCCESS: {
      return {
        ...state,
        alertMessage: 'Registro eliminado correctamente.',
        showMessage: true,
        currentPage: 0,
        selectedItem: null
      }
    }
    case CRUD_UPDATE_SUCCESS: {
      return {
        ...state,
        alertMessage: 'Registro actualizado correctamente.',
        showMessage: true,
      }
    }
  }
};

所有格式都完全相同。

如您所见,没有办法知道每个动作都针对哪个动作。因此基本上遵循chain of responsibility pattern

相关问题