gpt4 book ai didi

javascript - NgRx - 减少存储的优先级和执行顺序

转载 作者:行者123 更新时间:2023-12-03 01:34:54 25 4
gpt4 key购买 nike

如果不同的 reducer 关联到相同的操作并对存储执行更改,那么它们在进行任何编辑之前是否会收到相同版本的存储?有优先考虑的吗?

示例:

假设您调度一个操作 Update 来编辑服务器端的实体,一旦数据成功更新,效果将调度一个 Update_Success 操作以及该实体的实例新收到的实体版本作为有效负载。第一个经典的逻辑 reducer 将使用它来更新存储:

case ItemActionTypes.UPDATE_ITEM_SUCCESS: {
const item = action.payload;

return {
...adapter.upsertOne(item, state),
loaded: true,
loading: false
};
}

现在假设在不同的文件中,您有一个与同一操作关联的不同的 reducer ,并且需要将新接收到的实体与存储中的旧实体进行比较:

case ItemActionTypes.UPDATE_ITEM_SUCCESS: {
const item = action.payload;
const oldItem = state.entities[item.id];
const changes = getAffectedProperties(item, oldItem);

// ...
}

问题是:是否有可能 oldItem 实际上持有新收到的项目而不是旧项目,因为第一个 reducer 可能已经更新了它?这是先到先得的情况吗?或者它的实现中是否有任何东西可以保证所有 reducer 都对同一版本的存储执行更改,并且可能在进一步的步骤中合并这些更改?

最佳答案

If different reducers are associated to the same action and are performing changes to the store, are they receiving the same version of it before any edit happens? Is there a priority to consider?

Reducer 只能访问它们的状态。所以你不应该真正关心这个。

此外,当分派(dispatch)一个操作时,所有 reducer 都会以同步方式调用。这意味着,如果对于 ACTION_A 您从不同的位置(/不同的 reducer )修改存储,您的选择器(甚至 View )只会刷新一次。当该操作的所有更新都应用到商店时。

关于javascript - NgRx - 减少存储的优先级和执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51118683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com