React状态管理 | 青训营笔记

97 阅读3分钟

状态管理

从Reacl诞生之后,前端组件化的方案深人人心,React遵循的是单向数据流的原则,属性通过Props自上而下的传递,当页面的比较简单,组件之间的层级关系比较浅时,这种自上而下的单向数据流的方式是不会有向题的,如果页面一复杂,组件的成套层级,深,这种单向数据流的传递方式,将会使你陷人到“嵌套地狱”。

状态管理本身,解决的就是这种“收套”地狱的问题,解决的是跨层级组件之间的数据通信和状态共亨

状态管理工具的本质:管理共享内存中的状态。

1、共享内存

2、管理状态

3、页面通信

4、组件通信

5、刷新失效

详细定义:单页应用的各个组件本身是共享内存的,如果将状态保存在内存中,就可以读写统一内存中的变量,从而达到状态共享的目的

Reactj简介

OtherDisplay没有用到Context里的value,但是Context的值变换,otherDisplay也会重新渲染。

React中的Context解决了react中,props或者state进行多级数据传递,则数据需要自项下流经过每一级组件,无法跨级的问题。但是Context在页面间共享数据的时候同样有很多问题:

1、Context相当于全局变量, 难以追溯数据的变更情况。

2、使用Context的组件内部精合度太高,不利于组件的复用和单元测试。

3、会产生不必要的更新,例如会穿透memo和dependicies等。

4、Context 只能存储单一·值,无法存储多个冬自拥有消费者的值的集合。

5、粒度也不太好控制,不能细粒度的区分组件依赖了哪一个Context。

6、多个Context会存在层层嵌套的问题

Redux

Redux是xFlux演变而来的,Flux它是FaceBook官方给出的应用架构,利用数据的单向流动的形式对公共状态进行管理,不过现在已经被淘汰了,但是其设计思想还是可以参考和借鉴的。

Redux的三大原则: 1、单一数据源: 在redux中,整个应用的全局State(再次注意是全局statel,都会保存在一个store中,一个单一数据源state tree也简化了应用的调试和和监控,它也让你在开发中能将应用数据持久化到本地,从而加速开发周期。此外,有一些功能以前很难实现,比如"撤销/重做”,在单一数据源的原则下,使用 Redux 实现将非常容易

2、Store中的State是只读的: 不能直接修改store中的state. store中的state是只读的。唯一能改变store中的state的方式就是通过actior

3、使用纯函数来执行修改: 接受纯函数来接受aciton,该纯函数叫reducer,可以改变store中的state.