Redux/Redux-Saga 中的回调是反模式?

Callback in Redux/Redux-Saga is an Anti-pattern?

让我们弄清楚, 用户执行登录提交,因此应用显示 提交按钮一个 Spinner,一个独立的状态,它帮助我们 (isLoading)。

好的,当应用程序发送到 saga 登录操作时,我们可以传递一个回调 用于在登录提交成功或失败时设置假加载状态。

有些专家会说,在 reducer 中管理加载状态,但会携带到所有整个应用程序 加载状态,对于某些特定操作听起来不太好。

回调的问题在于架构不保证回调会被调用或不会被调用多次。这是因为 redux 操作是基本事件 - 每个事件都可以由 0-n 处理程序(在我们的例子中是 sagas)处理。

当然在撰写本文时您知道该特定代码只处理一次,但对于其他人来说这可能很难理解,除非项目中有严格的规则来处理它。

与此同时,将本地状态放入 redux 存储并不好,你是对的。我通常通过将数据逻辑移动到它自己的结构来处理这个问题。所以例如从服务器加载项目集合不再是某些组件的本地状态,而是可以由应用程序的多个部分使用和重用的全局数据状态。这也将使跨整个应用程序等的数据自定义缓存逻辑变得更容易。但是,对于某些特定的后端调用,redux 中的某些本地组件状态仍然是不可避免的。

就未来而言,我看到了 useSaga 钩子的一些尝试,它可以在本地 useReducer 钩子和本地状态之上工作,但是这种逻辑的实现仍然有限,因为当前的 React 钩子 api 缺少 certain functionality,这是确保它在 React 提交阶段、渲染 bail outs、reducer 重新运行等方面正常工作所必需的