- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
第
React使用有限状态机的实现示例
目录什么是有限状态机?有限状态机的示例有限状态机和软件开发、计算机科学有什么关系?举了那么多例子,但我该怎么展示在前端开发中使用状态机呢?React应用程序中的注册表单的传统实现方式还有其他风险把表单重构为有限状态机状态事件使用xstate将有限状态机可视化通过9个步骤完成重构步骤1:为上下文添加类型定义步骤2:添加将状态映射到组件的函数步骤3:将上下文添加到有限状态机的定义中步骤4:定义一个将改变上下文的函数步骤5:将这个函数添加到有限状态机的actions中步骤6:将由previous和next事件触发这个操作步骤7:向组件添加useMachineHook步骤8:通过onPrevious和onNext函数将事件发送到有限状态机步骤9:渲染当前状态对应的组件有限状态机的安全性,使得我们的表单同样安全在React中使用有限状态机的概括在React中使用有限状态机,似乎不是一个寻常的话题。因为有限状态机通常和前端关系不大。但是最近我发现了一个非常棒的技巧,可以在复杂的React项目中发挥有限状态机的作用。可以很好的提高程序的安全性。下面我们就来看看吧。
什么是有限状态机?
有限状态机,英文是FiniteStateMachine,简称FSM,有时候也被称为有限状态自动机(FiniteStateAutoMation)。它是一种描述系统行为的数学计算模型,也就是一种抽象机。它可以替代图灵机等其他类型的模型。有限状态机由给定对象的所有可能状态以及它们之间的转换组成。和图灵机相比,它的计算能力较低。这种计算能力的区别意味着FSM的计算能力更加有限,因为它具有有限数量的状态,不如的话就是无限状态机了。更重要的是:状态机的一条规则是:它在任何时候都只处于一种状态。由于有限状态机会根据适当的组合或预定的时间顺序产生某些动作,因此我们可以在现代社会的任何地方找到有限状态机的影子。这些包括自动售货机、电梯,甚至是红绿灯。
有限状态机的示例
一个现实中完美匹配有限状态机的例子是红绿灯。我们来分析一下红绿灯的工作方式:它有四种状态:
停车-红灯。准备开车-红灯和黄灯。开车-绿灯。准备停车-黄灯。
它有四种状态的转换:
停车-准备开车。准备开车-开车开车-准备停车。准备停车-停车。
我们可以看到,我们有有限数量的状态和状态的转换。另外,红绿灯在任何时候都只能处于一种状态。这意味着我们在这处理的是有限状态机。更重要的是,通过实现有限状态机,我们可以保证,模型不会发生意外。以红绿灯为例,红绿灯绝对不会出现直接从绿灯转换成红灯的情况。
有限状态机和软件开发、计算机科学有什么关系?
其实有很多关系。特别是游戏开发,很多游戏中都会大量使用有限状态机。举个例子,大家应该都玩过超级马里奥这款2D游戏。马里奥在游戏里可以做什么呢?他可以:静止、朝右走、朝左走、跳跃。从代码的角度来看,它对应的就是摇杆事件。
什么都不按-默认设置静止状态。按左键-触发设置朝左走状态的朝左走事件。按右键-触发设置朝右走状态的朝右走事件。按跳跃键-触发设置跳跃状态的跳跃事件。松开按键-触发设置静止状态的静止事件。
举了那么多例子,但我该怎么展示在前端开发中使用状态机呢?
无论是从上面的概念还是具体的场景,我都是想保证你对有限状态机有一个了解。接下来我来讲讲有限状态机在前端的应用场景。首先我得承认,在前端开发中有限状态机并不是那么常见。我认为这个现象的主要原因是因为它不是实现功能最简单也不是最快的方法。这有点像TypeScript,它会让你慢一点,它会带来一些复杂性。但最终每个人都会从中受益。为了证明我的这种观点并非毫无根据,我会展示一个我曾经开发的React项目中使用有限状态机的示例。这是一个很简单的注册表单,分为三个部分。每个部分都会根据当前填写的进度进行渲染。
React应用程序中的注册表单的传统实现方式
我先快速演示一下我实现上述表单功能的方法。首先,我要定义所有的组件以及初始状态。
constStep={
Company:0,
Director:1,
Contact:2,
}asconst;
constViews=[CompanyDataFormPart/,DirectorDataFormPart/,ContactDataFormPart/
constinitialStep=Step.Account
接下来我们定义状态:
c
文档评论(0)