从 Redux-Saga 函数更新另一个 Redux 存储的最佳方法

Posted

技术标签:

【中文标题】从 Redux-Saga 函数更新另一个 Redux 存储的最佳方法【英文标题】:Best Way To Update Another Redux Store From Redux-Saga Function 【发布时间】:2018-10-19 00:03:30 【问题描述】:

我有一个 React/Redux 应用程序,我选择将 Redux 状态组织成 2 个主要部分,广告和任务,并使用 combineReducers。

首先创建广告。可以将单个广告或一组广告分组并分配给新任务。

在我的广告商店中,我有 reducer 和 saga 函数,它们可以进行与广告相关的 api 调用并更新广告的 Redux 状态。

在我的任务存储中,我有 reducer 和 saga 函数,它们可以进行与任务相关的 api 调用并更新任务的 Redux 状态。

当从一组广告创建任务时,我需要更新 Ads Redux 状态。最初我只是派遣我的广告操作创建者进行 api 调用并检索所有广告的更新列表。不幸的是,API 调用是一个非常复杂的查询,因此相当耗时。

当我调用 api 来创建任务时,我会返回一些数据,我可以使用这些数据来更新 ads Redux 状态,而不必进行缓慢的 api 调用。

因为多个广告可以进入创建任务,所以我的广告 ID 存储在一个数组中。

我试图弄清楚如何循环遍历该数组并在 ads Redux 存储中调度一个 reducer 以使用此数据更新状态。

我遇到的一个问题是一个错误,指出无法从我用来迭代广告 ID 数组的 forEach 循环内部调用 yield。

另一个问题是找到从一个 Redux 存储到另一个存储更新状态的最佳方法。

我想我可以将所有内容合并到一个 Redux 存储中,但该文件会无限长。

不知道该往哪个方向走。

【问题讨论】:

【参考方案1】:

让这变得困难的真正问题是弄清楚如何在循环中使用yield。

这最终奏效了:

yield myArray.map((item: string) => 
    put(OtherReduxStoreActions.myActionCreatorFunction(item))
);

【讨论】:

以上是关于从 Redux-Saga 函数更新另一个 Redux 存储的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

从 redux-saga 函数访问 React 上下文值

redux-saga基本用法

如何在 redux-saga 中等待另一个动作

使用 redux-saga 对 redux store 进行异步调用

redux-saga

Declarative Effects --- redux-saga