如果不同的化简器与同一动作相关联并且正在对商店进行更改,那么在进行任何编辑之前,它们是否收到了相同的版本?有优先考虑的地方吗?
示例:
让我们假设您在服务器端分派了一个动作Update
以编辑实体,一旦数据成功更新,一个效果将分派一个Update_Success
动作,该实体的新接收版本为有效载荷。第一个经典的逻辑化约简器将使用它来更新商店:
case ItemActionTypes.UPDATE_ITEM_SUCCESS: {
const item = action.payload;
return {
...adapter.upsertOne(item, state),
loaded: true,
loading: false
};
}
现在让我们假设在另一个文件中,您具有与同一操作关联的另一个化简器,并且需要将新接收的实体与商店中的旧实体进行比较:
case ItemActionTypes.UPDATE_ITEM_SUCCESS: {
const item = action.payload;
const oldItem = state.entities[item.id];
const changes = getAffectedProperties(item, oldItem);
// ...
}
问题是:oldItem
实际上有可能保存了新收到的物品,而不是旧物品,因为第一个减速器可能已经更新了它?这是先到先得案例吗?还是在实现上有什么保证所有的reducer对同一版本的商店进行更改,并可能将这些更改进一步合并?
答案 0 :(得分:1)
如果不同的化合器与相同的动作相关联并且是 对商店进行更改,他们是否收到相同的版本 进行任何编辑之前?有优先考虑的地方吗?
减速器只能访问其状态。因此,您不应该真正在意这一点。
此外,当分派一个动作时,所有减速器都以同步方式调用。这意味着,如果您要为ACTION_A
从不同的地方(/不同的缩减器)修改商店,那么选择器(甚至视图)将仅刷新一次。当该操作的所有更新都应用到商店时。