什么是状态管理
引入
从React诞生之后,前端组件化的方案深入人心,React遵信单向数据流原则,属性通过Props自上而下的传递。但页面比较简单,组件之间的层级关系比较浅时,这种自上而下单向数据流的方式时没有问题的,但是页面一旦复杂,组件嵌套层级更深入,这种单向数据流的传递方式,会导致开发人员陷入到 “嵌套地狱” 。
状态管理本身,就是为了解决这种“嵌套”地狱的问题,解决的是跨层级组件之间的数据通信和状态共享
本质
状态管理工具的本质:管理共享内存中的状态
- 共享内存
- 管理状态
- 页面通信
- 组件通信
- 刷新失效?
详细定义:单页应用的各个组件本身是共享内存的,如果将状态保存在内存中,就可以读写统一内存中的变量,从而达到状态共享的目的。
React中的状态管理工具
状态管理工具:
- Vue: Vue(Pinia)
- Angular: Service, Rxjs
- React: Flux, Redux, Mobx, Rxjs, Jotai, Zustand
不同的前端框架定义不同,Vue和Angular双向数据绑定,计算属性等,数据是响应式的,控制视图书刷新,拥有计算属性等,这些使得Vue和Angular需要状态管理的场景减少,此外其本身就包含了完整的状态管理工具,比如Vue的Vue和Pinia,Angular的Service(Rxjs)等,从官方定调。而React不太一样,React是一个纯UI层的前端框架,UI=fn(state). React将状态的变动完全交给给开发者。
状态管理工具简介
React状态管理工具可以分为以下几类:
- React自带:Local State(props)和Context
- 单向数据流:Flux, Redux(Redux-toolkit)
- 双向数据流绑定:Mobx
- 原子型状态管理:Recoil,Jotai
- 异步操作密集型:Rxjs
不同的状态管理工具具有不同的适用性,不同场景需要选择合理的状态管理工具