首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >takeEvery和takeLatest.为什么?什么时候使用?同时使用?

takeEvery和takeLatest.为什么?什么时候使用?同时使用?
EN

Stack Overflow用户
提问于 2020-05-24 09:57:45
回答 4查看 23K关注 0票数 27

我不清楚何时使用takeEvery以及何时使用takeLatest?在复古传奇里。

通过阅读官方文件,我得到了一个基本的区别。但是,在takeEvery中创建并发操作的用途是什么(例如,用户以快速的速度连续点击加载用户按钮2次,第二次单击将发出USER_REQUESTED,而对第一次单击的fetchUser尚未终止)

代码语言:javascript
运行
复制
import { takeEvery } from `redux-saga/effects`

function* fetchUser(action) {
  ...
}

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

有谁能解释一下。因为我对复古传奇一无所知。

提前谢谢。

EN

Stack Overflow用户

回答已采纳

发布于 2020-05-24 11:10:28

这是每个用例都需要考虑的问题。

在这些情况下,您可以使用takeEvery

  1. 对于sagas来说,这不是异步的,因此没有理由取消它们。takeLatest在这里也可以工作,但是当读取代码时,它可能会给出错误的指示,表明有什么东西需要取消。
  2. 有时,当行动在某种程度上不同的时候,每次。想象一下,你有一部电影,你在添加带有电影体裁的标签。每次触发动作,您都会得到不同的类型,即使它是相同的动作类型。用户可以比从服务器获得响应更快地添加类型。但是,仅仅因为你快速地添加了多种类型并不意味着你想要停止传奇添加前一个。
  3. 当您对多个不同项目具有相同的加载操作时的廉价实现。例如,你有电影列表,每个都有“加载细节”按钮。(让我们忽略一个事实,即一旦加载开始,您可能应该隐藏或禁用按钮)。对于一部电影,数据总是相同的,但它们之间的数据是不同的。当您单击“电影1”的“加载详细信息”时,您不希望取消对“电影2”的数据加载。由于它是电影的动态列表,所以动作类型每次都是相同的,差异可能类似于电影在动作中的id。 在理想的实现中,您可能应该为同一个电影/id取消以前的load,但是这需要更复杂的代码,所以如果您只执行一些简单的应用程序,您可能会决定忽略它,只允许多次运行相同的电影。这就是我称之为“廉价实施”的原因。
票数 20
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61984294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档