一、前言

  • 在实际的前端开发中,像 cardList 中包含的那些数据,一般都是通过发起异步 http 请求从后端服务中获得。
  • 我们希望把数据逻辑(cardList 相关逻辑)和视图逻辑(PuzzleCardsPage)分开管理在不同的模块中,「关注分离」使得代码更加健壮,同时易于调试。
  • 我们希望这些数据在需要的时候,可以提供给不同的组件使用:也即数据共享。

而 dva 就是用来满足这些需求的

  • 通过把状态上提到 dva model 中,我们把数据逻辑从页面中抽离出来。
  • 通过 effect 优雅地处理数据生成过程中的副作用,副作用中最常见的就是异步逻辑。
  • dva model 中的数据可以注入给任意组件。
  • 另外,dva 允许把数据逻辑再拆分(「页面」常常就是分隔的标志),以 namespace 区分。当你觉得有必要时,不同的 namespace 之间的 state 是可以互相访问的。

二、关键对象:model

DVA 的 model 对象有几个基本的属性,需要掌握:

  • namespace:model 的命名空间,只能用字符串。一个大型应用可能包含多个 model,通过namespace区分。
  • state:当前 model 状态的初始值,表示当前状态。
  • reducers:用于处理同步操作,唯一可以修改 state的地方,由 action 触发。reducer 是一个纯函数,它接受当前的 state 及一个 action 对象。action 对象里面可以包含数据体(payload)作为入参,需要返回一个新的 state。
  • effects:用于处理异步操作(例如:与服务端交互)和业务逻辑,也是由 action 触发。但是,它不可以修改 state,要通过触发 action 调用 reducer 实现对 state 的间接操作。
  • action:是 reducers 及 effects 的触发器,一般是一个对象,形如{ type: ‘add’, payload: todo },通过 type 属性可以匹配到具体某个 reducer 或者 effect,payload 属性则是数据体,用于传送给 reducer 或 effect。

三、初识dva

dva这个数据流解决方法和MVC架构类似:
在models的js中中进行获取后端数据。一定要记得在index.js中配置啊,如果忘记看下面:(route.model(require(’./models/xx’))。
在routers的js中进行数据渲染及业务处理。一定记得在route.js的文件夹下面配置router的访问地址。
提供常用的组件放置在comment中。

四、关于connect

前面知识说了数据渲染、获取后端数据,然而并没有将这两个联系起来。其实用的就是connect。
在此之前先介绍两个东西:
1、mapStateToProps,将需要的state的节点注入到与此视图数据相关的组件上。因为在models的js中我们将数据存贮在state上,现在到了routes的js中,需要使用,就是通过这个方法实现的,从这个方法的名字我们大致也可以看懂的。

function mapStateToProps(state, ownProps) {return {loading:state.getIn(['APP', 'loading']),data:state.getIn(['APP', 'data'])}// loading、data都是来自对应的reduce
}

2、mapDispatchToProps,将需要绑定的响应事件注入到组件上。

function mapDispatchToProps(dispatch){return {...bindActionCreators(action, dispatch)}
}
// mapDispatchToProps()函数的bindActionCreators、action需要引入// import * as action from '../action';// import { bindActionCreators } from 'redux';------------------------------------
------------------------------------
// 多个action 引入
import * as action from '../action';
import * as action2 from '../../index/action';
function mapDispatchToProps(dispatch){return {...bindActionCreators(action, dispatch),...bindActionCreators(action2, dispatch)}
}------------------------------------
------------------------------------
// 引入一个action里面的多个方法
import { function1, function2, function3 } from '../webs/action'
function mapDispatchToProps(dispatch) {return {...bindActionCreators({ afunction1, function2, function3 }, dispatch)}
}

五、具体案例

待补充。

六、参考博客

  • React依赖注入说明
  • DvaJS官方文档

七、后记

前端朋友说react简单,好学。对于我是一个新技术,而且我是一个后端,自己给自己无形增加了很大的压力。其实都是没必要的。如果不是工作需要,我估计也不会逼着自己去学,现在回想,其实也没有想象中的那么难懂。按照节奏,先学会用,再去深究原因,不可本末倒置。而且没必要把自己限制在一个后端的框框里面。毕竟纵向发展还是横向发展,亦或是全面发展,究竟哪种好,仁者见仁,智者见智。不过我相信,能完成任务,这是核心,否则一些都是扯淡。

dva的简单使用(一)相关推荐

  1. dva的用法_dva入门讲解

    这里有一份简洁的前端知识体系等待你查收,看看吧,会有惊喜哦~如果觉得不错,恳求star哈~ dva是什么? DVA 是基于 redux.redux-saga 和 react-router 的轻量级前端 ...

  2. 【单页面博客从前端到后端】基于 DVA+ANTD 搭建博客前后台界面

    在上篇文章我们已经搭建好了基础的开发环境,接下来会介绍如何引入 DVA 和 ANTD ,以及在引入过程中需要注意的问题.这里只会详细的书写部分组件,其他的组件都是大同小异.你可以在 github仓库 ...

  3. React框架之对Dva和Umi的简单理解

    文章目录 简述Dva,Umi和路由的理解 Dva基本流程与文件目录规划 Model Reducer.Effect Dva订阅 (Subcription) service(服务) 一个路由的文件目录 使 ...

  4. 总结对Dva数据流向的简单理解

    在刚刚接触Dva时,我最想知道的第一个问题就是: 1. Dva是什么? Dva官网文档的介绍是: dva 是体验技术部开发的 React 应用框架,将上面三个 React 工具库包装在一起,简化了 A ...

  5. DvaJS 入门, 快速上手Dva

    为什么要使用Dva? React 没有解决的问题 React 本身只是一个 DOM 的抽象层,使用组件构建虚拟 DOM. 如果开发大应用,还需要解决一个问题. 通信:组件之间如何通信? 数据流:数据如 ...

  6. dva + antd + mockjs 实现用户管理

    1.安装dva-cli npm install dva-cli -g 2.创建应用 dva new dvadashboard [dvadashboard为项目名] 3.安装mockjs npm ins ...

  7. dva 中使用绝对路径/别名的方法

    2019独角兽企业重金招聘Python工程师标准>>> 问题背景 在使用 dva 框架进行项目开发过程中,起初都是使用相对路径的,比如这样:../../../Models: 但是项目 ...

  8. dva 中的响应编程

    思维盲区 我最开始学习使用 dva 是从<12 步 30 分钟,完成用户管理的 CURD 应用>开始的,这同时也是 dva 的官方教程.然而因为领悟能力太差,最开始完全没理解.前 4 步还 ...

  9. React服务端渲染实现(基于Dva)

    React服务端渲染实现 (基于Dva) 功能 基于 Dva 的 SSR 解决方案 (react-router-v4, redux, redux-saga) 支持 Dynamic Import (不再 ...

最新文章

  1. Nat. Biotech. | AI、药物重定位和同行评审
  2. 注解@SuppressWarnings(unused)
  3. OpenGL 帧缓冲区
  4. Spring的PropertyPlaceholderConfigurer事例应用
  5. 商品规格表设计_400㎡美容院装修设计,为什么说无中式不贵气?
  6. 比尔·盖茨:如果你想了解硅谷,就看《硅谷》吧
  7. python的xpath用法_Python爬虫杂记 - Xpath高级用法
  8. Java集合之LinkedHashMap源码分析
  9. 《游戏设计师修炼之道:数据驱动的游戏设计》一2.3 创建漏洞:一个例子
  10. js中的date操作
  11. 美国一鹦鹉趁主人不在家上网购物:买的都是水果蔬菜
  12. 利用pagespeed插件优化网站css层叠样式文件
  13. Akka定义Actors和消息《two》译
  14. 图书管理系统sql语句
  15. Merriam Webster's Vocabulary Builder Roots 韦小绿英文词根 Unit 1整理
  16. margin-top传递问题
  17. QT HTTP接收多个数据包生成图片
  18. c++语言解一元二次方程,C++ 求解一元二次方程
  19. (一)职业规划和制定计划
  20. 【pytest官方文档】解读- 如何自定义mark标记,并将测试用例的数据传递给fixture函数

热门文章

  1. 使用javamail、阿里云邮箱发送邮件
  2. mysql 根据身份证号码更新性别
  3. 《网络攻防》第七周学习总结
  4. 在 WPS Word中成功使用zetero
  5. 【listener hangs】监听hangs,导致新的连接无法连接数据库
  6. Linux 追踪技术 ftrace 简介(一)
  7. Java小白的入门面试笔记--线程局部变量之灵魂四问
  8. 英语学习打卡day1
  9. windows 查找目录下文件中包含某个字符串
  10. 移动硬盘出现好多类似5b823bbe980da233a005c83a\update的文件,0字节,删不掉