React状态管理|青训营笔记

114 阅读2分钟

什么是状态管理

状态管理工具的本质

管理共享内存中的状态

简介

从React诞生之后,React遵循的是单向数据流的原则,属性通过Props自上而下的传递。当页面的比较简单,组件之间的层级关系比较浅时,这种自上而下的单向数据流的方式是不会有问题的。如果页面一复杂,组件的嵌套层级一深,这种单向数据流的传递方式,将会使你陷入到“嵌套地狱”。状态管理本身,解决的就是这种“嵌套”地狱的问题,解决的是跨层级组件之间的数据通信和状态共享。与 Vue、Angular 等框架不同,React 是纯 UI 层的前端框架,组件的状态完全由开发者决定,没有对数据的绑定。

React状态管理工具简介

React自带:Local State(props)和Context
单向数据流:Flux、Redux(Redux-toolkit)
双向数据绑定:Mobx
原子型状态管理:Recoil、Jotai
异步操作密集型:Rxjs 

react中的context

对于子页面中的组件,可使用Local State在父组件与子组件间进行通信;对于自页面之间的通信,可由Context完成。react中的context解决了react中,props或者state进行多级数据传递,则数据需要自顶下流经过每一级组件,无法跨级的问题。但是context在页面间共享数据的时候同样有很多问题:
1、context相当于全局变量,难以追溯数据变更情况
2、使用context的组件内部耦合度太高,不利于组件复用和单元测试
3、会产生不必要的更新,比如穿透memo和dependencies等 4、context只能存储单一值,无法存储多个各自拥有消费者的值的集合
5、粒度也不太好控制,不能细粒度的区分组件依赖了哪一个context
6、多个context会存在层层嵌套的问题

react中的Redux

  在 React 状态管理中比较经典的是Redux,Redux 由 Flux 演化而来。Flux 采用单向流动的数据进行状态管理:视图(View)发出信息(Action)给派发者(Dispatcher),由 Dispatcher 执行回调函数。

  但是 Flux 有拆分过于复杂、只支持单 store 等缺点,且已不再使用。现在我们一般用 Redux,在 Redux 中,Action 与 Dispatcher、store 与 Dispatcher 不再强制绑定,增加了其灵活性。

总结

不同场景合理的选择React状态管理工具,对我们的技术开发有帮助。