2024-08-27 10:10:05 +08:00

57 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# *Dva* 介绍
*Dva* 是一个基于 [redux](https://github.com/reduxjs/redux) 和 [redux-saga](https://github.com/redux-saga/redux-saga) 的数据流方案,可以理解为一个轻量级的应用框架。
官网:*https://dvajs.com/*
*Dva* 的本意,是将基于 *React* 技术栈中常用到的库集成到一起。当时,*React* 社区中最流行的应用架构方案如下:
- 路由: [React-Router](https://github.com/ReactTraining/react-router/tree/v2.8.1)
- 状态管理: [Redux](https://github.com/reactjs/redux)
- 异步操作: [Redux-saga](https://github.com/yelouafi/redux-saga)
上面的架构中,除了 *Redux-saga* 我们没有介绍,前面两个我们都是有所接触的。
*Dva* 则是将上面三个 *React* 工具库包装在一起,简化了 *API*,让开发 *React* 应用更加方便和快捷。因此:
> ***Dva = React-Router + Redux + Redux-saga***
*Redux-saga* 主要是为了处理数据流中异步操作的问题,虽然我们没有前面没有介绍,但是并不影响我们学习 *Dva*
*Dva* 中提供的数据流方案如下图:
数据流图1:
<img src="https://xiejie-typora.oss-cn-chengdu.aliyuncs.com/2022-11-05-082108.png" alt="image-20221105162108061" style="zoom:50%;" />
数据流图2:
<img src="https://xiejie-typora.oss-cn-chengdu.aliyuncs.com/2022-11-05-082152.png" alt="image-20221105162152274" style="zoom:50%;" />
*Dva* 中的核心概念如下:
- *app.model*
- *namespace*: 当前 *Model* 的名称。整个应用的 *State*,由多个小的 *Model**State**namespace**key* 合成
- *state*: 该 *Model* 当前的状态。数据保存在这里,直接决定了视图层的输出
- *reducers*: *Action* 处理器,处理同步动作,用来算出最新的 *State*
- *effects**Action* 处理器,处理异步动作,*Effect* 是一个 *Generator* 函数,内部使用 *yield* 关键字,标识每一步的操作(不管是异步或同步)
- *dva* 提供多个 *effect* 函数内部的处理函数,比较常用的是 `call``put`
- *call*:执行异步函数
- *put*:发出一个 *Action*,类似于 *dispatch*
*Dva* 练习:学生管理系统
目前,*Dva* 已经被融入到了 *Umi* 当中,之后我们在 *Umi* 中可以以插件的形式开启 *Dva* 来管理应用的数据流。