0

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

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

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

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

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

据我了解,Redux缺乏副作用是它可以坚持纯函数式范式。但这与使用副作用有关,例如在网络应用程序或游戏中需要很多次。

提前致谢!

4

1 回答 1

4

如果您愿意,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 通常返回一个新状态,因此它们是 XState 转换的结果。

您可能会找到一种将所有这些连接在一起的方法(最近用 Vuex 做了类似的事情)。XState 机器只是从 Redux 实体调用的单例,但您不会将机器“嵌入”到 Redux 中。

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

于 2020-05-15T09:44:17.443 回答