首页 > 解决方案 > 放入传奇后调用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

标签: javascriptreactjsreduxsaga

解决方案


推荐阅读