javascript - 放入传奇后调用redux select是否等待商店更新?
问题描述
我有一个场景,我们通过调度一个调用reducer来更新状态的动作来将一个项目添加到一个列表中,然后尝试在之后立即获取该更新的列表。这是一个简单的例子:
yield put(addItem(newItem));
const items = yield select(getItems);
// do something with items
我的问题是,新项目是否保证在items
,或者这是一个竞争条件?我知道这yield
是在等待调度动作,但我担心动作将被调度,这将触发传奇继续,然后调用选择器,然后减速器实际更新状态。这是一个有效的担忧吗?或者put
在减速器首先运行之前甚至不会返回?
我知道我可以简单地select
先调用,调度操作,然后在 saga 本地更新items
,如下所示:
const items = yield select(getItems);
yield put(addItem(newItem));
const updatedItems = [
...items,
newItem
];
// do something with items
但是,我想避免这种情况,因为它本质上是在 saga 中重新创建 reducer 逻辑,并且要求 reducer 中的任何更改也反映在 saga 中。select
从之后的状态更新对象会更干净put
。
解决方案
推荐阅读
- algorithm - 使用平滑规则求解递归关系
- c# - 计算平均成绩,不包括输入的最低和最高值
- sql - 如何将我的 csv 文件导入 postgres?
- indexing - where子句的多列中,有一列没有被索引 - 诺数据库
- python - Django 静态文件加载失败
- node.js - 面向用户细分/受众的数据库模型 Merise
- wordpress - 根据重量和单位销售时,如何在 WooCommerce 中的价格后添加 /kg 或 /each
- deep-learning - tf.data.Dataset:不能为给定的输入类型指定 `batch_size` 参数
- python - 从字典列表中获取数据
- pde - Fenics中的复数