我是React的新手,只是关于Reducers的一个问题。下面是一本书中的一些示例代码:
export default createStore(combineReducers(
{
modelData: ReducerOne,
stateData: ReducerTwo
}));
书上写着:
每个化简器都在数据存储的单独部分上运行,但是在处理动作时,每个化简器都会传递动作,直到其中一个返回一个新的数据存储对象,表明该动作已被处理。
以下是我的问题:
Q1。假设有一个动作,该动作类型称为“更新”,只有ReducerTwo处理此动作类型。这是否意味着ReducerOne仍将首先被调用,然后ReducerTwo被调用?如果是的话,这是没有效率的,不是吗? image有很多化简器,其中大多数不处理相关类型的化简器会被调用,直到调用正确的化简器为止。
Q2。这是否意味着所有减速器中的动作类型必须唯一?例如,ReducerTwo处理“ Update”操作类型,因此ReducerOne无法处理“ Update”,我们必须将名称修改为“ Update_One”吗?每次添加新的化简器时,我们都需要检查所有现有的化简器,以查看动作类型的名称是否重复,这是一个乏味且容易出错的过程?
答案 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。