[React状态管理| 青训营笔记]

61 阅读3分钟

React状态管理:

课前问题思考:

1.为什么不能用window对象?

2.react hooks给状态管理库的设计带来了哪些新思路?

什么是状态管理:

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

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

为什么React有这么多状态管理工具?

Vue: Vuex(Pinia)

Angular: Service和Rxjs

React: Flux、Redux、Mobx、Rxjs、Recoil、Jotai、Zustand

跟不同前端框架的定义有关, Vue和Angular双向数据绑定,计算属性等,数据是响应式的,

控制视图刷新,拥有计算属性等,这些使得Vue和Angular需要状态管理的场景减少,此外其本身就包含了完整的状态管理工具,比如Vue的Vuex和Pinia,Angular的Service(RXjs)等从官方定调。而React不一样, React是一个纯UI层的前端框架, UI = fn(state),React将状态的变动完全交给开发者。

Local State(props)

import {useState] from 'react'

const Hello = () =>{

const [name , setName] = useState ( ' Jony ' )

return <>Hello,{name}</>

}

 

Redux的三大原则:单一数据源,只有一个store、store中的state是只读的、使用纯函数来执行修改。

谢积伦9585

1.单一数据源:

在redux中,整个应用的全局State(再次注意是全局state),都会保存在一个store中,一个单一数据源state tree也简化了应用的调试和和监控;它也让你在开发中能将应用数据持久化到本地. 从而加速开发周期。此外,有一些功能

以前很难实现,比如"撤销/重做”,在单一数据源的原则下,使用Redux实现将非常容易。

2.Store中的State是只读的:

我们不能直接修改store中的state, store中的state是只读的。唯一能改变store中的state的方式就是通过action

3.使用纯函数来执行修改:

接受纯函数来接受aciton,该纯函数叫reducer,可以改变store中的state.

因为Redux的上述特性,使得Redux可以做时间旅行。时间旅行:顾名思义,就是可以随时穿越到以前和未来.让应用程序切换到任意时间的状态。因此,如果复杂的场景,特别是存在页面组件间复杂的通信的场景非常适合用Redux来管理状态。

Redux比较适合用于大型Web项目,尤其是一些交互足够复杂、组件通信频繁的场景,状态可预测和回溯是非常有价值的。还有一种场景,比如需要事故重现,这种定义和上报事故异常和重现的场景,Redux也很有意义。

Redux的缺点也很明显,首先为了实现纯函数的Reducer,Redux必须处理各种各样的副作用,需要引入一系列的副作用中间件.加重的心智负担,此外Action,Dispatch,Reducer的模式需要写过多的样版代码,虽然通过React hooks和Redux toolkit可以减少一定的样板代码,但是复杂度还是摆在哪里。因此中小项目,也不太推荐使用Redux,可能Context或者React hooks中的useReducer就能满足你的需求。