在redux-saga(或任何其他中间件)中使用react钩子。

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

这个问题之前已经有人问过了,但是我没有找到任何合适的答案,只是不知道我是否遗漏了什么,或者说目前确实不可能做到。

具体来说,hooks & redux-saga (或任何其他中间件)之间有2个主要区别。

  1. 在redux-saga中,我可以在动作派遣时触发代码执行,而在hooks中,我只能在状态变化时触发代码执行。这2者并不总是等同的
  2. 钩子必须存在于组件的上下文中,但是一些 "后台 "逻辑(如初始化、位置检测等),与特定的组件无关。在redux-saga中,我可以灵活地在 "全局范围 "中定义它,而在hooks中,我必须将它附加到一些 "随机 "的组件上(可能是App或任何其他高级组件)。

那么,是否有可能在这两种方法之间 "搭桥",或者我应该简单地选择最适合每个特定情况的技术?

reactjs react-native redux react-hooks redux-saga
1个回答
1
投票

它们是解决不同问题的不同工具。Hooks在内部工作于一个功能组件的状态和生命周期。Redux在内部工作于整个react应用的状态和生命周期。Sagas帮助处理异步效果,比如外部数据获取。

一般来说,你要尽可能地限制变量和逻辑的范围。如果一个特定的 "状态 "是 只是 与单个组件相关,那么就把它保存在组件状态下。但如果几个组件或应用程序本身需要它,那么就把它存储在应用程序状态中。异步调用也是一样。如果一个外部调用只被一个组件使用,就把它保存在那里,但如果多个组件可以进行相同的外部异步调用,那么就让sagas来处理它们。

你可以自由地在每个组件中使用其中任何一种必要的东西来解决你的问题。


0
投票
  1. 在Redux-saga中,你只能在action dispatch上执行代码。钩子是比较通用的,比如说有了 useReducer 钩子,你可以在动作派发时触发代码,使用 useEffect 你可以在mountupdateunmount等情况下触发代码。
  2. Redux-saga也存在于一个组件的上下文中,或者更准确的说,整个Redux存在于一个(通常是顶层的)商店提供者组件中,Redux-saga只是它的一个中间件。所以基本上,如果你有一些全局的应用逻辑,并在你的 App 组成部分,它不是 某个随机成分,它是正确的地方把逻辑。

我最近还发现一个简单的库 https:/www.npmjs.compackageuse-saga-reducer 将传奇故事引入React的 useReducer. (我仍然不确定这是不是一个好主意--只是因为你可以并不意味着你应该这样做,对我来说,钩子异步函数通常已经足够了,但它至少是有趣的)

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