MJingv / jehol-person-blog

Jehol's Blog 🙋 (hexo+react)
https://mjingv.github.io/JeholBlog/
0 stars 1 forks source link

状态管理十全大补 #19

Open MJingv opened 5 years ago

MJingv commented 5 years ago

状态管理十全大补

资料来源 【第1525期】Vuex、Flux、Redux、Redux-saga、Dva、MobX

思路:把组件之间需要共享的状态抽取出来,遵循特定的约定,统一来管理,让状态的变化可以预测。

Store模式

flux

redux

flux redux
多个数据源(多个store) 单个数据源(一个store)
state可随便改 state只读(reduce返回新state)
非纯函数 纯函数reduce来修改

vuex

vuex

store

mutation

action

react-redux

原理

展示组件 vs 容器组件

- 展示组件 容器组件
作用 描述如何展示(骨架、样式) 描述如何运行(数据后去、状态更新)
直接用redux
数据来源 props 监听redux的state
数据修改 props调用cb 向redux派发actions
调用方式 手动 react-redux自动

react-saga【异步解决方案】

异步处理方式

redux-saga vs redux-thunk

dva

dva=react-redux+redux-saga

mobx

概念先行

  1. 状态管理方式:flux、mobx
  2. MobX 老大哥在看着 state 呢。state 只要一改变,所有用到它的地方就都跟着改变了
  3. flux/redux 函数式编程,mobx面向对象编程
  4. mobx vs redux
mobx redux
没有时间回溯能力,但是view更新精确,粒度控制很细 数据流动自然,利用时间回溯性,增强业务可预测性
autorunasync等方法 中间件处理副作用(异步)
小而精 大而全
MJingv commented 5 years ago

mobx思想及实现原理

概念先行

要点

  1. 定义状态并使其可观察
  2. 创建视图以响应状态的变化
  3. 更改状态

核心概念

  1. Observable state(可观察的状态)
  2. Computed values(计算值)
  3. Reactions(反应)
  4. Actions(动作)

概念与原则

1.概念

2.原则

MJingv commented 7 months ago

rematch

一个基于redux简化的状态管理库

如何使用

1.安装rematch和react-redux两个库 2.定义模型(model),其中描述状态(state)和改变状态的方法(reduces/effects异步) 3.创建store 4.在组件内使用action

MJingv commented 7 months ago

mobx

简单可拓展的响应式数据流状态管理库

如何使用

  1. 安装mobx
  2. 创建observable状态
  3. 创建action,修改状态的函数
  4. 在组件中使用@observer连接state和action

响应式数据流

优点:

  1. 简单:只需定义状态和改变,不需要手动更新视图和同步状态
  2. 高效:必要时更新
  3. 可预测:单向数据流可追溯

vue.js和mobx 响应式数据流区别

vue的数据依赖追踪

步骤