什么时候应该使用 Redux Saga 而不是 Redux Thunk,什么时候应该使用 Redux Thunk 而不是 Redux Saga?

When should I use Redux Saga instead of Redux Thunk, and when should I use Redux Thunk instead of Redux Saga?

题目和以往的不一样这是为什么。这个问题是什么时候。由于它们本身都是很好的框架,所以问题是我什么时候应该使用 thunk 而不是 saga。因为我的一个朋友一直坚持要我在我们的应用程序中使用 saga,但没有明显的原因。先谢谢了

两个 thunk 都是 saga,用作 redux 的中间件,通常用于 api hit。与 saga 相比,thunk 非常容易使用,但是 saga 比 thunk 有很多好处,例如 saga 有效果 takeLatest 如果用户重复按下按钮,thunk 会 api 点击每个单击但使用 saga 效果只会产生最新的(一个)api 个命中。它还有其他作用和好处,但它有学习开销

根据一些阅读资料和我的经验...

使用 Thunk 而不是 Saga 来完成简单琐碎的任务,例如:

  • AJAX 调用
  • 数据轮询 并且仅当它们由用户交互直接启动时。

将 Saga 用于

  • 任务交织,文档login example完美
  • 流程有很多步骤并等待其他条件发生("finite-state machine" 流程)
  • 在后台工作并独立于用户交互进行的任务(或 background/interactions 的混合)

选择 saga 而不是 thunk 或相反的谎言取决于手头的任务。两者都有公平的权衡。

Thunk 调度一个函数,该函数又调度一个动作。所以,

  • 优点:代码维护简单
  • 缺点:必须在测试用例中模拟 thunk 的异步行为,这可能会变得非常笨拙
  • 暗示:适用于应用程序的小而直接的异步部分

Sagas 在底层使用生成器函数,因此该函数实际上会在异步操作时暂停并在解析时恢复

  • 优点:测试用例变得公平和直接,无需模拟异步行为
  • 缺点:使代码更加复杂
  • 隐含:适用于需要复杂单元测试用例的应用程序的复杂异步部分