为什么要使用redux saga或thunk

为什么要使用redux saga或thunk,redux,react-redux,redux-saga,redux-thunk,Redux,React Redux,Redux Saga,Redux Thunk,我真的被redux传奇搞糊涂了。所以无论我看哪篇文章,他们都解释说这是为了修复redux和异步调用的副作用,甚至他们解释了saga和thunk的区别,但所有这些都令人困惑。 他们根本没有解释我为什么要用传奇?如果我让异步调用等待它,然后更新redux状态,会有什么问题 我需要的是一个简单明了的解释,说明为什么以及在什么情况下我们需要使用redux saga或thunk 如果我不使用saga,那么如果我单击1000次,我的代码将运行异步代码并等待1000次结果,那么我说的对吗?但是使用saga,我

我真的被redux传奇搞糊涂了。所以无论我看哪篇文章,他们都解释说这是为了修复redux和异步调用的副作用,甚至他们解释了saga和thunk的区别,但所有这些都令人困惑。 他们根本没有解释我为什么要用传奇?如果我让异步调用等待它,然后更新redux状态,会有什么问题

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

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

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

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

另外,当我们说redux本质上是同步流时,我们仍然可以将其转换 等待呼叫,然后继续。那么,这与传奇或传奇有什么不同呢 砰

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

如果我不使用saga,那么如果我点击1000次鼠标,我说的对吗 代码将返回asnc代码并等待结果1000次,但 我有办法控制它,要么并行运行(fork) 还是只运行最后一个


同样,可以使用自实现的redux中间件来限制除最后一次调用之外的所有调用。然而,redux传奇已经有了,还有许多其他常见的异步问题

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