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 重新运行等方面正常工作所必需的
让我们弄清楚, 用户执行登录提交,因此应用显示 提交按钮一个 Spinner,一个独立的状态,它帮助我们 (isLoading)。
好的,当应用程序发送到 saga 登录操作时,我们可以传递一个回调 用于在登录提交成功或失败时设置假加载状态。
有些专家会说,在 reducer 中管理加载状态,但会携带到所有整个应用程序 加载状态,对于某些特定操作听起来不太好。
回调的问题在于架构不保证回调会被调用或不会被调用多次。这是因为 redux 操作是基本事件 - 每个事件都可以由 0-n 处理程序(在我们的例子中是 sagas)处理。
当然在撰写本文时您知道该特定代码只处理一次,但对于其他人来说这可能很难理解,除非项目中有严格的规则来处理它。
与此同时,将本地状态放入 redux 存储并不好,你是对的。我通常通过将数据逻辑移动到它自己的结构来处理这个问题。所以例如从服务器加载项目集合不再是某些组件的本地状态,而是可以由应用程序的多个部分使用和重用的全局数据状态。这也将使跨整个应用程序等的数据自定义缓存逻辑变得更容易。但是,对于某些特定的后端调用,redux 中的某些本地组件状态仍然是不可避免的。
就未来而言,我看到了 useSaga
钩子的一些尝试,它可以在本地 useReducer
钩子和本地状态之上工作,但是这种逻辑的实现仍然有限,因为当前的 React 钩子 api 缺少 certain functionality,这是确保它在 React 提交阶段、渲染 bail outs、reducer 重新运行等方面正常工作所必需的