这里有一份简洁的前端知识体系等待你查收,看看吧,会有惊喜哦~如果觉得不错,恳求star哈~

dva是什么?

DVA 是基于 redux、redux-saga 和 react-router 的轻量级前端框架及最佳实践沉淀。

理解dva跟其他技术实现的对应关系,有利于深入理解dva。

为什么要用dva?

日常react开发过程中,我们经常会遇到以下场景:

我们希望有安全的数据共享机制

我们希望数据逻辑跟视图逻辑分离,既有利于提高代码健壮性,也易于调试。

我们希望异步请求数据,并改变视图。

这些需求,dva都满足了:

通过把状态上提到 dva model 中,我们把数据逻辑从页面中抽离出来。

通过 effect 优雅地处理数据生成过程中的副作用,副作用中最常见的就是异步逻辑。

dva model 中的数据可以注入给任意组件。

如何使用dva?

为什么使用dva,而不选择redux,最重要的原因是dva用法简单,可以降低团队成员的学习成本。

相比redux,dva真的可以算非常简单,我们来看看基本概念。

model

其中,model 是 DVA 中最重要的概念,基本的属性如下:

namespace:model 的命名空间,只能用字符串。一个大型应用可能包含多个 model,通过namespace区分。

state:当前 model 状态的初始值,表示当前状态。

reducers:用于处理同步操作,可以修改 state,由 action 触发。

effects:用于处理异步操作(例如:与服务端交互)和业务逻辑,也是由 action 触发。但是,它不可以修改 state,要通过触发 action 调用 reducer 实现对 state 的间接操作。

action:是 reducers 及 effects 的触发器

connect

熟悉react开发的你,应该知道状态控制一直是react的一个难点。

我们可以把子组件的 state 可以上提,由父组件来管理:

子组件间接回调到父组件的 setState 的方法来改变父组件的 state;

新的 state 通过 props 的形式把再次被子组件获悉。

当然,dva给了我们另一种可能,就是把state上提到所有React子组件之上,过程类似:

页面通过调用 dispatch 函数来驱动 dva model state 的改变;

改变后的 dva model state通过 connect 方法注入页面。

要达到上述效果,我们就必须想办法将React跟dva这两个平行世界关联起来,connect 粉墨登场。connect是连接dva跟React的关键,一定要重点理解。

dva中的connect ,采用的是装饰器的写法,所谓装饰器,就是给装饰对象赋予它本来不具备的能力。connect的存在,就是为了让组件获取两样东西:model中的数据,驱动model改变的方法。

connect 接收两个参数,做的就是这两件事:

mapStateToProps:获取model中的数据

mapDispatchToProps:驱动model改变的方法

其中,mapStateToProps 字面含义就是把dva model中的state通过组件的props注入给组件。

而mapDispatchToProps 字面含义就是将dispatch方法通过组件的props注入给组件。使用mapDispatchToProps跟dispatch向组件注入方法,组件使用这些方法能给dva model发送消息。

dispatch

这里就不得不提下dispatch,dispatch 函数就是和 dva model 打交道的唯一途径。 dispatch 函数接受一个 对象 作为入参,在概念上我们称它为 action,唯一强制要包含的是 type 字段,string 类型,用来告诉 dva 我们想要干什么。

action

终于轮到action上台了。我们把想做的事情通过 action 描述出来,并通过 dispatch 告诉 dva model,而对这个消息的处理就是 dva 的事情了。

reducer

我们通过dispatch派发了action,现在问题来了,dva如何识别并执行action呢?

这就是reducer要做的事情。

dva model 中可以定义一个叫做 reducers 的成员用来响应 action 并修改 state。每一个 reducer 都是一个 function,action 派发后,通过 action.type 被唯一地匹配到,随后执行函数体逻辑,返回值被 dva 使用作为新的 state。state 的改变随后会被 connect 注入到组件中,触发视图改变。

我们再回过头来看上文提到的model基本属性:

namespace:model 的命名空间,只能用字符串。一个大型应用可能包含多个 model,通过namespace区分。

state:当前 model 状态的初始值,表示当前状态。

reducers:用于处理同步操作,可以修改 state,由 action 触发。

effects:用于处理异步操作(例如:与服务端交互)和业务逻辑,也是由 action 触发。但是,它不可以修改 state,要通过触发 action 调用 reducer 实现对 state 的间接操作。

action:是 reducers 及 effects 的触发器

dva的用法,其实都是围绕着这些基本属性展开,本人希望读者可以加深对这些属性的理解。

最后,上一张dva官方的代码示例图吧:

dva的用法_dva入门讲解相关推荐

  1. dva的用法_dva 的基本用法

    dva 的基本用法 dva 是一个状态管理工具, 整合了 redux,redux-saga,react-router,fetch 等框架, 目前只能用于 react 的状态管理 1. dva 的 mo ...

  2. dva的用法_dva.js 用法详解:列表展示

    这次主要通过在线获取用户数据并且渲染成列表这个案例来演示dva.js. 整个开发流程概括下来应该是: 编写用户列表model(数据模型)->  编写修改model的方法 -> 编写服务接口 ...

  3. dva的用法_dva基本用法

    基于 redux.redux-saga 和 react-router 的轻量级前端框架,是支付宝前端应用架构的发展和选择. 主要代码由4个部分组成:router,modle,routes,servic ...

  4. dva的用法_dva.js初探

    dva是一个在redux和redux-saga的基础上封装的一个轻型框架,能辅助更好的组织代码进行开发.同时提供了react-router和fetch,基本上具备了开发web前端应用所需的主要工具,省 ...

  5. dva的用法_dva的基本用法

    dva是一个状态管理工具,整合了redux,redux-saga,react-router,fetch等框架,目前只能用于react的状态管理 1. dva的models dva的主要作用还是整合了r ...

  6. JEECG_3.7.2新版本入门讲解—UI标签库专题-张代浩-专题视频课程

    JEECG_3.7.2新版本入门讲解-UI标签库专题-9741人已学习 课程介绍         JEECG_3.7.2新版本入门讲解-UI标签库专题(UI标签库的使用和二次开发实战) 课程收益    ...

  7. 2019天下3最新服务器,天下3:2019标准号全民竞技赛【太虚】门派定位解析及入门讲解...

    原标题:天下3:2019标准号全民竞技赛[太虚]门派定位解析及入门讲解 最近身边很多朋友都在玩今年的全民竞技赛,但是由于除了男女龙外的其他每个门派只能限定1人出战,又或者是为了阵容搭配需求,都需要重新 ...

  8. 【直播】耿远昊:Pandas入门讲解(安泰第四届数据科学训练营)

    Pandas入门讲解 直播信息 主讲人:耿远昊,Datawhale成员,joyful-pandas作者. 直播时间:2021年04月07日 20:00~21:00 直播内容: 时间序列中的必知必会: ...

  9. 一看就明白的爬虫入门讲解:基础理论篇

    一看就明白的爬虫入门讲解:基础理论篇 发表于2015-11-13 18:50| 5909次阅读| 来源CSDN| 37 条评论| 作者孔淼 爬虫经验分享HTMLCSSAjaxApp网络 width=& ...

最新文章

  1. Cisco Catalyst 2960系列交换机资料
  2. c语言结果用全局变量返回,c语言参数传递和返回值及变量存储.doc
  3. 浅析linux内核中的idr机制
  4. jsf和jsp_带有JSF,Servlet和CDI的DynamicReports和JasperReports
  5. java期末判断题题库_(java期末考试选择题题库.doc
  6. 史上最低价Surface!微软Surface Laptop Go上架 3700元起
  7. <matplotlib.lines.Line2D object at 0x7f68cfd5a2e8>终极解决办法
  8. 浮点数运算和金额处理
  9. js排序算法05——快速排序
  10. 迷你linux主机,ECS推出两款迷你主机新品:支持Linux系统,可输出4K视频
  11. java中native方法实现_详解Java中native方法的使用
  12. 关于CWMP基础(一)----(TR069)
  13. php安装libpng,求助:libpng编译问题
  14. 图像坐标球面投影_晶体的球面坐标与球面投影
  15. apache网站ftp服务器搭建,利用 Apache FtpServer 搭建 FTP 服务器
  16. IBM X 345服务器无法从光驱启动配置解决方法——非常规方法
  17. CubeMXIDE 汉化
  18. 快速将非Word中的不可编辑的公式转换为Word文档中公式编辑器里可编辑的公式的办法
  19. PS 考试案例 03笔记
  20. 【C#】UserControl用法

热门文章

  1. 扬州大学计算机系导师,胡学龙
  2. Quoted-printable 编码认识、介绍、编码解码转换
  3. python-人工智能-遗传算法的实现
  4. Kafka学习笔记 --- 生产者producer与消费者关系comsumer
  5. 【Android探索】基于OpenCV的微液滴粒径分析APP
  6. 程序员必须唱我哪些算法?
  7. 试用期没过,因在公司上了 1024 网站...
  8. 通过google的gson把xml转成json
  9. python 量子电路模拟库qiskit
  10. java调用高德地图API