前端开发中使用”有限状态机“解决复杂的交互问题

Web服务器——HTTP状态机解析 Web服务器——HTTP状态机解析 程序说明 主要练习HTTP解析的状态机的使用。接收一个客户端请求,判断是否是一个正确的GET请求,并解析出相应字段。 运行方法 编译 g++ main.cpp -o main 直接运行也可以,默认ip为127.0.0.1,默认端口为8888 运行 curl 127.0.0.1:7777/index.html 运行结果: 客户端发起请求: # 方式1:命令行... 阅读详情
http://my.oschina.net/blogshi/blog/266763
摘要
在维基百科中称:有限状态机FSM是设计和实现事件驱动程序内复杂行为组织原则的有力工具。

    前端开发是有逻辑的,这点毋庸置疑。程序员的思维逻辑赋予了代码各种能力,但是前端开发中经常面对的是用户的操作。在一个比较复杂的页面中(貌似现在也很少有简单页面了),用户的操作是不可预见的,假如有很多按钮,每个按钮都会做一件自己独一无二的事,如果上帝保佑所有的这些操作,这些事件都彼此没有限制,而且结果互不影响,那没有问题。但在开发中好像没有这种好运气,所以经常需要协调和平衡这些函数之间的执行。

    如果你使用的是纯JS或者单独仅有jQuery的情况下,遇到这种让人焦头烂额的情形会尤为明显,前端MVC一定程度上隐藏了并处理了这些问题,但是也并不完全。这个时候你可能需要了解一下关于”有限状态机“的概念,前端开发中这应该是一个很有用的东西。

    描述一下”有限状态机“:

有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。

状态总数(state)是有限的。

任一时刻,只会处于一种状态中。

在某种条件下,会从一种状态转变到另一种状态中。

    在维基百科中称:有限状态机FSM是设计和实现事件驱动程序内复杂行为组织原则的有力工具。

    对于前端来说,尤其是Javascript编程时,这个模型的意义就在于可以将其套用在很多对象上。具体个例子,比如一个按钮平时就是正常的按钮,当你点击后变成一个input。当然你可能会说这么简单的功能,我直接用jQuery甚至不用都可以,操作DOM显示和隐藏就好了。如果你还抱有这种天真的想法,我只能说你没遇到过让你痛不欲生的页面。。。当页面复杂到一定程度,单纯操作DOM去处理前端只会加快你疯掉的进程。

    这里对于Button套用有限状态机的模型,相当btn对象只有两个状态,显示状态和编辑状态。看看代码吧:

01var btn = {
02  // 当前状态
03  currentState: 'btn',
04  
05  // 绑定事件
06  initialize: function() {
07    var self = this;
08    self.on("click", self.transition);
09  },
10  
11  // 状态转换
12  transition: function(event){
13    switch(this.currentState) {
14      case "btn":
15        this.currentState = 'input';
16        doSomething();
17        break;
18      case "input":
19        this.currentState = 'btn';
20        doSomething();
21        break;
22      default:
23        console.log('Invalid State!');
24        break;
25    }
26  } 
27};

    上面就是有限状态机的写法,逻辑和层次上确实清晰了,对于状态越多的对象,就越适合这种写法。

    通过有限状态机的这种模式,我认为最重要的一点就是将用户的操作行为,也就是组件的事件响应(比如点击)与组件的行为表现分离开来.在确切的说,通过建立一个有限状态机的模型,我们完全不关心用户的点击行为具体做了什么,这时组件可能会有几种状态对应不同的表现形式,而用户触发的事件仅仅是切换了模型的状态.至于每个状态的具体表现和行为,我们完全可以单独定义,也就说这时一种行为和响应上的解耦.

    Github上有两个比较好的库,都是实现FSM的,有兴趣可以具体看看:

    https://github.com/fschaefer/Stately.js

     https://github.com/jakesgordon/javascript-state-machine
rx-state-machine:带有 RxJs 的React式状态机 带有 RxJs 的React式状态机 我们正在展示如何使用React式概念大大简化与状态机的交互。 我们正在使用 Stately.js 创建一个简单的 Door 表示,具有 4 个状态和以下转换: var door = Stately.machine({ 'CLOSED': { 'open': /* => */ 'OPEN', 'lock': /* => */ 'LOCKED' }, 'OPEN': { 'close': /* => */ 'CLOSED' }, 'LOCKED': { 'unlock': /* => */ 'CLOSED', 'break': /* => */ 'BROKEN' }, 'BROKEN 立即下载

相关推荐

前端项目-stately.js.zip

前端项目-stately.js,stately.js是一个基于javascript的有限状态机(fsm)引擎,用于node.js和浏览器。

软件设计之状态机

============================================================================ 原创作品,允许转载。转载时请务必以超链接形式标明原始出处、以及本声明。 请注明转自:http://yunjianfei.iteye.com/blog/ ==========================================...

Dreaming 1006

有限状态机代码FSM.zip

有限状态机C语言代码,主要利用数据结构实现有限状态机的实现。另附简单注释

干货 | 作为前端,工作中处理过什么复杂的需求,如何解决的?

(多图预警)聊一聊当下发生的事情吧。疫情期间大家都在享受延长假期的福利,吐槽在家办公的不爽,而我们则从过年开始就一直在战斗,到现在还没有好好休息过。先说背景,我目前在腾讯IMWeb团队...

我本可以容忍阳光,如果我不曾见过太阳,然而阳光已使我荒凉,成为更新的荒凉。 908

跨平台烧录实战:RKDevTool在Windows/Linux/MacOS下的统一与差异

本文详细解析了RKDevTool在Windows、Linux和macOS三大操作系统下的固件烧录实践,重点介绍了RK3576开发板的环境配置、工具链选择、烧录模式切换及常见问题解决方案,帮助开发者构建稳定可靠的跨平台烧录工作流。

cnn8visionary的博客 206

实验5 振幅调制(集成乘法器幅度调制电路)

目录5-1 振荡调制的基本工作原理一.振幅调制和调幅波1.普通调幅波(AM)(1)调幅波的表达式、波形(2)调幅波的频谱2.抑制载波双边带调幅(DSB)3.抑制载波单边带调幅(SSB)二.普通调幅波的产生电路三.抑制载波调幅的产生电路5-2 振幅调制实验电路 5-1 振荡调制的基本工作原理 根据电磁波理论知道,只有频率较高的振荡才能被天线有效地辐射。但是人的讲话声音变换为相应电信号的频率较低,不适于直接从天线上辐射。因此,为了传递信息,就必须将要传递的信息“记载”到高频振荡上去。这一“记载”过程称为调

胡毛毛的博客 3万+

状态机是什么,能解决什么问题?

状态机定义 状态机全称是有限状态自动机器。是现实世界抽象出来的一种数学模型,具体到代码里,就是一种算法,他拥有当前状态,当输入条件时,能输出下一个状态,也就是说,状态机是某种事务的状态变更的封装算法。 解决的问题 状态机解决的问题就是当某种模型的状态变更比较比较复杂,且状态比较多,那么我们有必要将这些状态变化的逻辑抽象出来,做成一个可以统一调用的算法,这样封装出来的代码就比较好维护,同时可读性也很强。 使用案例 寻找中。 ...

诗人不写诗 5791

PLSQL 14.0.6 下载使用教程

众所周知,PLSQL 只是一个oracle第三方开发测试工具,它依赖oracle 客户端搭配使用,但是oracle 客户端有2G,相当庞大,不建议安装。所以我们如果下载安装好PLSQL,再下载好轻量级的支持远程链接的oracle客户端,这样搭配使用可以的话就最好了,答案是可以的。 第一步: PLSQL 下载与安装 PLSQL 14.0.6 下载地址 : https://www.allroundautomations.com/registered-plsqldev/ 下载下来,除了安装路径更改一下,

qq976511508的博客 2134

yutto命令行指南:掌握CLI参数,定制你的专属下载方案

yutto是一款功能强大的B站视频下载器,支持丰富的命令行参数,让你轻松定制个性化的下载方案。无论是基础的视频清晰度选择,还是高级的批量下载配置,都能通过简单的命令实现。 [![yutto Logo](https://raw.gitcode.com/gh_mirrors/yu/yutto/raw/935f160f8c12ada6b51c1613c154947ae8fde37f/docs/publ

gitblog_00037的博客 558

STM32CubeMX、keil、simulink联合开发MCU教程

一、整体思路 利用Matlab的simulink搭建模型生成C代码,通过stm32cubemx生成工程,最后在KEIL或者IAR等工具里面编译生成代码下载至MCU中执行。 本文以流水灯建立模型和简单使用定时器为例进行演示。 二、开发环境 1、安装Matlab Matlab版本建议在2013B以上,本文使用Matlab 2016a。 2、安装STM32硬件支持包 下载地址(https://www.stmcu.org.cn/document/detail/index/id-216053) 安装完成后重启MAT

tzlaa的博客 7736

virtuoso--DFF

27-实验课-std_cell2

qq_61440044的博客 2006

基于有限状态机的交互组件设计与实现

有限状态机(FSM)(维基百科)是设计和实现事件驱动程序内复杂行为组织原则的有力工具。 早在2007年,IBM的工程师就提出在在JAVASCRIPT中使用有限状态机来实现组件的方法,原文地址如下: 《JavaScript 中的有限状态机》http://www.ibm.com/developerworks/cn/web/wa-finitemach/ 现在结合KISSY等现代JS库和

起风了 909

第42篇FEDGLOSS算法BEYOND LOCAL SHARPNESS:COMMUNICATION-EFFICIENT GLOBALSHARPNESS-AWARE MINIMIZATIONFOR

:用上一轮伪梯度最小化锐度,获取与全局损失最相关的几何信息,引导全局优化趋向更平坦的最小值。效果对比分析:FEDGLOss。

weixin_74009895的博客 526

聊一聊的有限状态机

为大家准备了一个前端资料包。包含54本,2.57G的前端相关电子书,《前端面试宝典(附答案和解析)》,难点、重点知识视频教程(全套)。) 现代前端开发框架的编程哲学UI=f(state),即视图是状态的某种映射,对一个具体的应用来说,映射函数f是确定的,state状态变化之后UI进行相应变化。

老司机的后备箱 620

基于Simulink的超级电容器充放电仿真

为了更好地理解和设计超级电容器的应用系统,通常需要进行详细的仿真分析。Simulink 提供了一个强大的仿真环境,可以用来设计、分析和验证超级电容器充放电系统的控制策略。本教程将详细介绍如何使用 Simulink 进行超级电容器充放电的仿真实例。如果你希望对超级电容器的充放电过程进行精确控制,可以添加一个简单的逻辑控制器来控制开关的状态。通过本教程,我们详细介绍了如何使用 Simulink 进行超级电容器充放电的仿真实例。2. 添加超级电容器模型。7. 添加控制器(可选)1. 调整超级电容器参数。

xiaoheshang_123的博客 518

第一章 EB安装

1.DemoWorkspace 是基于EB当前组件配置下的例程,包含了启动文件和中断服务函数以及组件demo。2.Mclsar 下存放的是EB的插件包和静态MCAL的驱动文件。

舊梦的博客 1963

说说你对JavaScript与有限状态机的理解

在前端开发中,JavaScript与有限状态机的关系紧密相连。有限状态机(Finite State Machine, FSM)作为一种数学模型,为前端开发提供了一个清晰且结构化的方式来管理和维护应用的状态。综上所述,JavaScript与有限状态机在前端开发中扮演着重要角色,它们共同确保了应用状态的清晰、可控和高效管理。

王铁柱666的博客 268

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

LeakCanary 终极指南:让内存泄漏无处遁形 [特殊字符]

你是否曾经遇到过这样的场景?你的Android应用运行得越来越慢,最终崩溃退出,而你却完全不知道问题出在哪里。内存泄漏就像代码中的隐形杀手,悄无声息地吞噬着你的应用性能。今天,我要为你介绍一个Android开发者的救星——LeakCanary,这个强大的内存检测工具将彻底改变你调试内存泄漏的方式! ## 🔍 为什么你需要内存侦探? 想象一下,你的应用就像一个不断有客人进出的餐厅。正常情况下,

gitblog_00959的博客 795

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

浏览器兼容总结

整理了些网络收集的有关兼容性的问题,原作者不详(侵删) ##不同浏览器的标签默认的外补丁和内补丁不同 问题症状:随便写几个标签,不加样式控制的情况下,各自的margin 和padding差异较大。 解决方案:CSS里加 *{margin:0;padding:0;} 备注:几乎所有的CSS文件开头都会用通配符*来设置各个标签的内外补丁是0。 ##块属性标签float后,又有

burning__33的博客 1022

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

web服务器项目

web服务器

weixin_52341045的博客 1482

有限状态机FSM详解(1)——最简单的FSM

【基本概念】 有限状态机(finite-state machine,FSM)可以解决有限个状态转换的问题。具体的定义和相关的概念先不说,我们直接通过例子来理解。 我们知道一个角色通常会至少有idle,walk,jump,attack,dead这五种状态,我们在操作角色时角色会根据我们的操作转换为不同的状态,那么角色如何根据输入转换为相应的状态呢,这就是状态机的要解决的问题。 【我们的需求】 按I键,角色变为Idle状态,播放相应动画 按W键,角色变为walk状态,播放相应动画,也即角色开始行.

enternalstar的博客 2万+

将Web应用程序设置成有限状态机

将Web应用程序设置成有限状态机 作者: 周靖 译Thursday, April 10 2003 3:56 PM   虽然Web应用程序是目前最热门的主题,但它们的编程模型有别于传统的、非Web的应用程序,这为开发者带来了新的挑战。传统应用程序具有相当确定的控制流,但Web应用程序

BruceWayen的专栏 1460

有限状态自动机在复杂前端 UI 组件实现中的应用

导语

u013468030的博客 212

前端:从状态管理到有限状态机的思考

点击上方程序员成长指北,回复“1”加入Node进阶交流群1. 状态管理在我们前端开发中,一定会接触现在最热门的几大框架(Vue, React等等),在使用框架的过程中,我们一定会接触某些...

程序员成长指北 432

基于网页模板与状态机的网页交互设计

1.用WinForm做东西,在交互这一块,通过窗体、按钮和事件等,可以很方便快捷的做出比较复杂的交互。但我们发现,用Web做这种交互,则非常难。 2.原因何在?细细分析,比如登录。WinForm的窗体,打开时,时未登录的。登录后,首先后台数据发生改变,比如后台会有一个类,记录当前登录的账户信息。而点击登录按钮后,前台界面元素也发生相应改变,比如登录信息输入框没了,变成了用户...

weixin_30861459的博客 177
上一篇: 脱离jsonp,如何跨域读取、提交数据 da宗熊
下一篇: Array.prototype.slice.call(arguments)
DDPJS
博客等级 码龄17年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值