Skip to content

状态管理

在函数的世界中,为了能够达到纯洁,我们引入了纯函数,纯函数没有副作用,没有状态的变化,但是纯函数并不能解决所有的问题,比如我们需要在某个时刻记录一些状态,比如用户登录状态,购物车状态等等,这些状态的变化需要被记录下来,但是又不能影响纯函数的执行,所以我们需要引入状态管理。

状态管理就是将状态的变化记录下来,并且能够通过纯函数来访问和修改状态,同时保证状态的变化不会影响到纯函数的执行。

状态管理的基本概念

状态管理的基本概念包括:

  • 状态:程序运行时的数据,包括变量、对象、数组等。
  • 状态变化:程序运行时状态的变化,包括变量的赋值、对象的修改、数组的添加等。
  • 状态管理:将状态的变化记录下来,并且能够通过纯函数来访问和修改状态,同时保证状态的变化不会影响到纯函数的执行。

状态管理的实现

状态管理的实现可以通过以下几种方式:

  • 全局变量:将状态保存在全局变量中,通过脏函数来访问和修改状态;
  • 闭包:将状态保存在闭包中,通过闭包来访问和修改状态;
  • 状态管理库:使用状态管理库等模块在程序中进行集中化管理;

状态的生命周期

状态的生命周期包括:

  • 创建:init,创建状态,包括变量的初始化、对象的创建、数组的初始化等。
  • 访问:get,通过纯函数来访问状态。
  • 修改:set,通过纯函数来修改状态。
  • 销毁:drop,销毁状态,包括变量的销毁、对象的销毁、数组的销毁等。

一个操作对应 2 个切点,共 8 个切点

状态订阅

状态订阅是指当状态发生变化时,通知相关的副作用函数,使得副作用在用户进行输入的时候发生。而不是我们的程序主动发出的副作用。 订阅主要是订阅 set 和 drop,因为这两个函数会改变状态,所以需要通知相关的副作用函数和衍生状态重新执行。

自动订阅和手动订阅,手动订阅需要用户手动调用 API 来指定订阅的数据,

衍生状态

衍生状态是指通过纯函数计算出来的状态,这些状态依赖于其他状态,当其他状态发生变化时,衍生状态也会发生变化。衍生状态可以通过纯函数来计算。

响应式编程

响应式编程是一种编程范式,它允许程序在状态发生变化时自动执行副作用函数,实现依赖的自动化同步。响应式编程的核心思想是将状态的变化视为事件,当状态发生变化时,自动执行相关的副作用函数,这个副作用,主要是指本地状态的同步和远程状态的同步。