最近我一直在学习Redux,在阅读文档时,遇到了名为 reducers 的东西。 根据{{3}},
reducer是一个纯函数,它采用以前的状态和 操作,然后返回下一个状态。
即(previousState, action) => newState
;
有限状态自动机听起来有些熟悉,它会自动获取当前状态和输入,然后转到下一个状态< / strong>。
那么将减速器视为 FSA 是正确的吗?
答案 0 :(得分:1)
这是一个抽象的问题,但我会说否。
虽然一般来说FSA确实会收到 action 并以与redux相同的方式更新机器 state ,但在一个一般概念上,FSA仍然有所不同有限数量的状态,对于redux reducer来说不是这样。
对于大多数使用redux的场景,您实际上并不知道下一步操作将包含哪些有效载荷。
以FSA为例:一部电梯
电梯具有有限数量的级别。它可以转到每一个,或返回到默认值(大厅)。此处的所有内容均已严格定义。可以知道每个状态和转换组合。
在redux中,对于过滤器下拉菜单也可能如此,用户可以从固定的项目列表中选择或重置过滤器。
但是,如果您将html输入元素值推入状态,则您实际上并不知道用户将输入什么,并且每次输入都会产生一个新状态。以这种方式,redux归约器中的状态数可能会无限
我想说的是,这将与无限树自动机更加内联,这是您要维护的模式的扩展:
答案 1 :(得分:1)
Reducer描述了确定性状态转换,因此您可以认为它听起来与FSA类似。
主要区别在于简化器仅描述确定性状态转换,而不限制其可以传递的可能状态或动作。
Reducer可以传递无数个不同的状态,并且可以传递无数个不同的动作,因此,Reducer本身不能描述确定性状态自动机。
归约器与对有限数量的状态的描述以及可以传递给它的有限数量的可能动作共同构成确定性有限自动机的定义。