Javascript Redux中的减速机是否代表FSA?

Javascript Redux中的减速机是否代表FSA?,javascript,redux,finite-automata,Javascript,Redux,Finite Automata,最近,我一直在学习Redux,在阅读文档时,我遇到了一个名为reducers的东西。 据报道, 减速器是一个纯函数,采用前一状态和一个 操作,并且返回下一个状态 i、 e.(以前的状态、动作)=>newState 这听起来对有限状态自动机有点熟悉,它接受当前状态和输入,然后进入下一个状态 因此,将减数法视为FSA是正确的吗?或者它是不同的吗?这是一个有点抽象的问题,但我会说不 虽然FSA通常会收到一个动作,并以与redux相同的方式更新机器状态,但它在一个一般概念上仍然不同,即FSA具有有限数量

最近,我一直在学习Redux,在阅读文档时,我遇到了一个名为reducers的东西。 据报道,

减速器是一个纯函数,采用前一状态一个 操作,并且返回下一个状态

i、 e.
(以前的状态、动作)=>newState

这听起来对有限状态自动机有点熟悉,它接受当前状态和输入,然后进入下一个状态


因此,将减数法视为FSA是正确的吗?或者它是不同的吗?

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

虽然FSA通常会收到一个动作,并以与redux相同的方式更新机器状态,但它在一个一般概念上仍然不同,即FSA具有有限数量的状态,而redux的情况并非如此

对于大多数使用redux的场景,您并不真正知道下一个操作将包含什么负载

以FSA为例:电梯

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

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

但是,如果将html输入元素值推送到状态,则不知道用户将输入什么,并且每个输入都将产生一个新状态。以这种方式,redux减缩器中的状态数将潜在地无限

我想说的是,这将更符合无限树自动机,它是您正在关注的模式的扩展:


减速机描述确定性状态转换,因此您可以正确地认为它听起来类似于FSA

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

减速器可以被传递无限多个不同的状态,也可以被传递无限多个不同的动作,因此减速器本身并不能描述确定性状态自动机


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

我明白了你的意思,除此之外,大部分答案都是有意义的
,如果将html输入元素值推送到状态,则不知道用户将输入什么,并且每次输入都会产生一个新状态在现实世界中,有没有人希望通过用户输入创建新状态的用例?很多。假设您有一个多步骤注册表单(例如react native),并且希望在将完整的用户信息推送到后端(例如firebase)之前,将所有用户数据保存到onboarding reducer。另一个例子是全局搜索栏组件。将状态推送到搜索减缩器(假设我们有一个名为query的道具)是有意义的,这样当用户更改网站上的路线时,搜索不会重置。谢谢您的回答。现在说得通了。说得通了。不过我有一个问题。在任何真实世界的应用程序中,是否存在这样一个用例:该应用程序将具有无限状态或无限动作?是的,几乎每个应用程序都具有无限状态和/或动作。例如,来自的todoApp可以处于无限多个不同的状态(所有可能的todo项的组合),并且可以生成无限多个唯一的ADD_todo操作(每个可能的新todo项一个)啊,现在我明白了。谢谢你的回答。:)乐意效劳