State是一个状态管理的库,用来描述、控制各种状态。
比如用户有登录、未登录状态,我们定义好了有限的状态,然后在这些状态里增加转换的动作:登录 --> 未登录 :将数据清空(动作)
未登录 --> 登录 :存储用户数据(动作)
这下子,状态的转换成了整个系统的触发器,我们只要围绕不同状态进行数据管理就行了。为何选择他
乍看之下,你可能会觉得数据管理变得更加复杂了,因为之前我只将重心放在数据上,并没有引入状态的概念。其实引入状态之后,整个系统的逻辑就会更加清晰。因为这些状态都是有限的,所以系统的流程也变得有限。
有限的流程就会有更加清晰的交互,我们能准确知道在哪个流程需要怎么样的数据,同时也便于前端和设计师或产品经理进行交流,后期的测试也变得更加容易了。更令人欣喜的是,Xstate还可以转换成流程图。
XState例子
用有限的状态(state)管理无限的数据(context),XState为前端数据管理提供了新的解决方案。
我们来模拟一个灯光系统,颜色只能从红->黄->绿->红。
const lightMachine = Machine({然后启动机器:
id: 'light',
initial: 'red',
context: {
retries: 0
},
states: {
red: {
on: {
CLICK: 'yellow'
}
},
yellow: {
on: {
CLICK: 'green',
}
},
green: {
on: {
CLICK: 'red',
}
},
}
});
const lightService = interpret(lightMachine).onTransition(state =>
// 状态转换的时候输出当前状态
console.log(state.value)
);
lightService.start()
// => red
lightService.send('CLICK');
// => yellow
lightService.send('CLICK');
// => green
lightService.send('CLICK');
// => red
可以看到,各个颜色之间的转换很清晰,能按照预期进行。
网友回复
DLNA与UPnP的区别和不同?
苏超自建抢票app,通过先预约再抽签化解高并发抢票?
python如何让给电脑在局域网中伪装成电视接收手机的投屏图片视频播放?
如何结合python+js如何自己的视频编码与加密播放直播?
python如何在电脑上通过局域网将本地视频或m3u8视频投屏电视播放?
腾讯视频爱奇艺优酷vip电影电视剧视频如何通过python绕过vip收费直接观看?
有没有可免费观看全球电视台直播m3u8地址url的合集?
有没有实现观影自由的免vip影视苹果 CMS V10 API的可用url?
python如何实时检测电脑usb插入检测报警?
如何判断真人操作的鼠标移动直线轨迹与机器操作的轨迹?