React状态管理 | 青训营笔记

63 阅读2分钟

React状态管理

从全局对象window说起

window.color = "Green"
window.theme = "York"

全局污染,重复声明

直接取值或赋值,数据变更不清晰

渲染颗粒不可控

无法进行时间旅行

什么是状态管理

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

1,共享内存

2,管理状态

3,页面通信

4,组件通信

5,刷新失效

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

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

Vue:Vuex(Pinia)

Angular:service和Rxjs

React: Flux Redux Mobx Rxjs

跟前端框架定义有关,Vue和Angular双向数据绑定,计算属性等数据是响应式的,控制视图刷新,拥有计算属性等,此外本身就包含了完整的状态管理工具 从官方定调 React不一样 是一个纯前端UI= fn(state) React将状态的变更完全交给开发者。

React状态管理的简介

React自带:Local State(props) 和Context

单向数据流:Flux Redux(Redux-toolkit)

双向数据绑定:Mobx

原子型状态管理: Recoil Jotai

异步操作密集型:Rxjs

每种状态管理都有其不同的适用性,不同场景需要合理的状态管理工具

Flux利用数据单项流动的形式进行管理

VIew:视图层

Action: 视图发出的消息

Dispatcher : 派发者用来接收Action,执行回调函数

Store:数据层 存放状态,一旦发生改动,就可以更新数据以及emit相关事件等

Flux的缺点:

(1) ui组件和容器组件的拆分过于复杂

(2) Axtion和Dispatcher绑定在一起

(3) 不支持多个store

(4)store被频繁引入和调用

状态管理简介

首先Redux解构了Action和Disatcher

export function addTodo(text){
    return {
        type:ActionTypes.ADD,
        text:text
    };
}

上面就市一个Redux中的action,它是独立的,如果使用flux需要和dispatcher耦合在一起

let action = {
type:"add"
};
dispatcher.dispatch(action)
dispatcher.register(action=>{
    switch(action.type){
        case "add":
            ...
            break;
    }
})