Redux 中的减速器是否代表 FSA?

Do reducers in Redux represent a FSA?

最近我一直在学习 Redux,在阅读文档时,我遇到了一个叫做 reducers 的东西。 根据 doc,

The reducer is a pure function that takes the previous state and an action, and returns the next state.

(previousState, action) => newState;

这听起来有点熟悉有限状态自动机,它采用当前状态输入并转到下一个状态

因此,将 reducers 视为 FSA 是正确的还是有所不同?

这是一个有点抽象的问题,但我会说没有

虽然通常 FSA 确实接收到 action 并以与 redux 相同的方式更新机器 state,但它仍然有所不同一个普遍的概念,即 FSA 具有有限数量的状态,而这对于 redux reducer 而言并非如此。

对于大多数使用 redux 的场景,你真的不知道下一个动作将包含什么负载。

以 FSA 为例:电梯

电梯的层数有限。它可以转到每一个,或 return 转到默认的一个(大厅)。这里的一切都是严格定义的。可以知道每个状态和转换组合。

在 redux 中,过滤器下拉列表也可能如此,用户可以从固定的项目列表中 select 或重置过滤。

但是,如果您将 html 输入元素值推送到状态,您实际上并不知道用户将输入什么,并且每个输入都会产生一个新状态。以这种方式,redux reducer 中的状态数量可能会 infinite

我会说这更符合无限树自动机,它是您正在寻找的模式的扩展:

https://en.wikipedia.org/wiki/Infinite_tree_automaton

reducer 描述了确定性状态转换,因此您认为它听起来与 FSA 相似是对的。

主要区别在于 reducer 仅描述确定性状态转换,它不限制可以传递的可能状态或操作。

reducer 可以传递无数种不同的状态,也可以传递无数种不同的动作,因此 reducer 本身并不能描述确定性状态自动机。

reducer 结合有限数量的状态描述和有限数量的可以传递给它的可能动作将共同构成确定性有限自动机的定义。