takeEvery和takeLatest。为什么?什么时候使用?同时使用吗?

问题描述 投票:1回答:1

我不清楚何时使用takeEvery和何时使用takeLatest吗?在redux-saga中。

我通过阅读官方文档获得了基本的不同。但是在takeEvery中创建并发操作有什么用(例如,用户快速连续两次单击“加载用户”按钮,第二次单击将调度USER_REQUESTED,而fetchUser在第一个触发时触发)尚未终止)

import { takeEvery } from `redux-saga/effects`

function* fetchUser(action) {
  ...
}

function* watchFetchUser() {
  yield takeEvery('USER_REQUESTED', fetchUser)
}

任何人都可以解释。因为我对redux-saga完全陌生。

提前感谢。

reactjs redux redux-saga
1个回答
0
投票

这是您确实需要根据用例考虑的事项。

在某些情况下,您可能会使用takeEvery

1)对于非异步的sagas,因此没有理由取消它们。 takeLatest在这里也可以使用,但是在读取代码时可能会给出错误的指示,表明有一些要取消的内容。

2)有时,每次动作在某种程度上有所不同。例如。假设您有一部电影,并且要添加带有该电影类型的标签。每次触发动作时,即使动作类型相同,您也会获得不同的体裁。与您从服务器获得响应相比,用户可以更快地添加类型。但是,仅仅因为您快速添加了多种类型并不意味着您就想停止添加前一种的传奇。

3)当您对多个不同的项目执行相同的加载操作时,廉价实现。例如。我有电影列表,每个电影都有“加载详细信息”按钮。 (让我们忽略一个事实,即一旦加载开始,您可能应该隐藏或禁用按钮)。一部电影的数据始终相同,但两者之间有所不同。当您单击电影1的加载详细信息时,您不想取消电影2的数据加载。由于它是电影的动态列表,每次的动作类型都相同,因此差异可能类似于id电影中的动作。在理想的实现中,您可能应该为相同的movie / id取消先前的加载传奇,但这将需要更复杂的代码,因此,如果您仅执行一些简单的应用,则可能会决定忽略它,而只允许以相同的方式运行sagas电影多次。这就是为什么我称其为“最便宜的实现:。

© www.soinside.com 2019 - 2024. All rights reserved.