【问题标题】:why to use redux saga or thunk at all为什么要使用 redux saga 或 thunk
【发布时间】:2019-11-19 02:42:37
【问题描述】:

我真的对 redux saga 感到困惑。因此,无论我看什么文章,他们都解释说它可以修复 redux 和异步调用的副作用,甚至他们解释了 saga 和 thunk 的区别,但所有这些都令人困惑。 他们根本没有解释为什么我应该使用 saga?如果我让异步调用等待它然后更新 redux 状态会有什么问题。

我需要一个简单明了的解释,说明为什么以及在什么情况下我们需要使用 redux saga 或 thunk?

我是否正确地说如果我不使用 saga,那么如果我单击 1000 次,我的代码将运行异步代码并等待结果 1000 次,但是有了 saga,我有办法控制它,要么并行运行( fork) 还是只运行最后一个?

【问题讨论】:

  • @blaz 因此,对于需要更改 redux 存储(而不是组件状态)并且是异步的任何操作,我们最好使用 thunk 或 saga,但我们不必使用它,如果不使用它仍然它已验证。对吗?
  • @blaz 同样,当我们说 redux 本质上是同步流时,我们仍然可以等待调用然后继续。那么这与 saga 或 thunk 有什么不同呢?
  • @blaz 我可以说如果我不使用 saga 那么如果我点击 1000 次我的代码将运行 asnc 代码并等待结果 1000 次但是有了 saga 我有办法控制它要么并行运行(fork),要么只运行最后一个?
  • 请查看我的回答

标签: redux react-redux redux-saga redux-thunk


【解决方案1】:

所以对于需要更改 redux 存储的任何操作(不是 组件状态)并且是异步的,我们最好使用 thunk 或 saga 但我们不必这样做,如果不使用它仍然是有效的。对吧?

首先,redux-saga 或 redux-thunk 是建立在 Redux's middleware 之上的库,用于处理与 redux 的主要数据流无关的问题,例如API 调用、日志记录、路由。您显然可以编写自己的中间件来处理异步流,而不是使用那些库,这可能会大大减轻您的应用程序大小。但是 redux-thunk 尤其是 redux-saga 有很多语法糖 API 来处理异步流的复杂使用,例如竞速、排序 API 调用、根据条件取消 API 调用等,这减少了很多工作实现自己的等效逻辑。

此外,当我们说 redux 本质上是同步流时,我们仍然可以等待 接听电话,然后继续。那么这与 saga 或 嗯?

更多的是个人意见,但我认为使用这些库的主要原因是关注点分离。通过中间件实现来处理所有异步流,我们可以在 react/redux 应用程序中拥有 3 个逻辑部分:redux 部分由用于同步数据流的纯函数组成,redux 中间件部分(可以是 redux-thunk 或 redux-saga)处理来自 redux 和 react 的所有 API 调用和副作用,用于处理用户与 redux store 的交互和通信。这样代码将更易于管理和单元测试。

我是否正确地说如果我不使用 saga 那么如果我点击 1000 次我的 代码将运行 asnc 代码并等待结果 1000 次,但 传奇我有办法控制它,要么并行运行(fork) 还是只运行最后一个?

同样,一个自我实现的 redux 中间件可用于限制除最后一次调用之外的所有调用。然而,redux-saga 已经有了an API for this case,还有更多其他常见的异步问题。

【讨论】:

    猜你喜欢
    • 2017-04-26
    • 2021-09-23
    • 2019-06-15
    • 2018-10-21
    • 2019-02-11
    • 2021-11-25
    • 2017-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多