用于数据存储和 React 集成的 Redux 和 XState

Redux and XState for data store and React integration

我的大部分 React 应用程序都在使用 Redux

我想我会开始使用 XState 因为我不必一直使用效果作为插件。

而且我认为是一个比较完整的模式。

我想了解的一件事是它与 React(钩子和 类)的联系,以及它与一般反应式编程的交互:

我可以(并且应该)使用 XState context 作为 Redux 数据存储吗? React Components 方式共享的单一事实来源?我的组件是否能够“connect”和“mapToPropsXState 上下文并仅在这些值更改时重新呈现,而不是每次状态机状态更改时?

据我了解,Redux 没有副作用,因此它可以遵循纯函数范式。但这打破了副作用的使用,例如在网络应用程序或游戏中需要很多次。

提前致谢!

如果你愿意,XState 基本上可以在 Redux(或其他状态管理库)中管理你的全局状态,但它不会像 Redux 那样取代与 React 的连接。您应该将其视为 Redux 的扩展,您仍然需要遵循 Redux 中使用的模式,但使用 XState 来执行它们。几个例子:

  • Redux 状态可以表示为任何东西,因此它可以是 XState 机状态 + XState 机上下文。
  • Redux 动作基本上应该触发 XState 机器转换。它们还可以触发异步操作 (https://xstate.js.org/docs/guides/communication.html#invoking-promises),因此您可能不需要 redux-thunk 之类的东西来处理它。您的操作将变得更加简单,但实际处理已移至机器。
  • Redux reducer 通常 return 一个新状态,因此它们是 XState 转换的结果。

你或许可以找到一种方法将它们连接在一起(最近用 Vuex 做了类似的事情)。 XState 机器只是从 Redux 实体调用的单例,但你不会 "embed" Redux 内部的机器。

您还需要像以前一样使用 react-redux 工具,并且机器永远不会真正暴露给实际的 React 组件(除了您还想对本地状态使用 XState 机器)。