各大传送门:

DvaJS Github

DvaJS API与示例

了解 dva
- dva = React-Router + Redux + Redux-saga + fetch

- dva的初衷是(其实应该是redux的初衷)。提供一个公共的顶层的状态管理工具,专门为view层服务(实现双向数据流),而让react只专注专心负责渲染view层。

dva项目入口初始化

在初始化的时候,指定使用的路由模式,这里使用了hash模式。

import dva from 'dva';
import createHistory from 'history/createHashHistory';
// user BrowserHistory
// import createHistory from 'history/createBrowserHistory'; // 1. Initialize
const app = dva({
history: createHistory(),
});

dva的几个规则:
1、通过dispatch调用namespace/effects
2、state(状态)
3、effects (异步操作)

- 函数必须带*,也就是生成器。
- 第一个参数,可以拓展为{payload, callback}
- 第二个参数,call和put
- call 就是调用 async的action函数
- put就是调用reducers的函数来更新state。

4、reducers

5、dva是以model为单位的,所有的应用逻辑都在上面

简而言之总结一下吧。开发dva分为两个阶段:
1、准备阶段:

- 定义 state 状态,用以绑定到 view 层;
- 定义 effects

- call用来调用 action,类似dispatch
- put用来调用reducers

- 定义 sync action 函数,用来进行异步请求;
- 定义 reducers 函数,用来更新 state。

2、调用阶段:

拿到dispatch

const { dispatch } = this.props
dispatch({type: 'count/add'}) // this.props.dispatch({type: 'count/add'})

可以直接调用 effects, 也可以直接调用reducers。如果是同名的话,会一起调用。优先执行reducers。
【dispatch 方法从哪里来?被 connect 的 Component 会自动在 props 中拥有 dispatch 方法。】

简单示例伪代码

/**
* 一、index.js 调用示例
handleClick () {
const { dispatch } = this.props
dispatch({ type: 'todo/save' }
} 二、async func 示例
export async function saveTodoToServer(codetype) {
return request(/api/framework/sys/code/list?codetype= + codetype);
}
*/ export default {
namespace: 'todo', state: {}, // 也可以是数组: [] effects: {
*save({ payload, callback }, { put, call }) {
// 调用 async func saveTodoToServer
yield call(saveTodoToServer, todo);
// 调用 reducers 更新 state 可以自由传递任何参数,必须保留type
yield put({ type: 'add', title: payload.title, text: payload: text, time: payload: time });
},
}, reducers: {
// 比较推荐es6的这样写:add(state, { title, text, time })
add(state, action) {
const title = action.title
const text = action.text
const todo = {
title: action.title,
text: action.text,
time: action.time
}
// 保存数据到 state
return {...state, todo};
},
},
}

React dva 的使用的更多相关文章

  1. react+dva 全局model中异步获取数据state在组件中取不到值

    先上结论,不是取不到,是写法有问题. 全文分4部分,1是问题描述,2是一开始的解决想法(错误做法),3是问题产生原因的思考,4是正常解决方法.只想看结论直接跳4 1.问题描述 接触react dva一 ...

  2. React & Dva & Actions & dispatch & effects

    React & Dva & Actions & dispatch & effects dispatch https://dvajs.com/guide/introduc ...

  3. React + Dva + Antd + Umi 概况

    Dva 由阿里架构师 sorrycc 带领 team 完成的一套前端框架,在作者的 github 里是这么描述它的:"dva 是 react 和 redux 的最佳实践". Ant ...

  4. react dva 表单校验

    import React,{ Component } from 'react'; import { connect } from 'dva'; import { WhiteSpace,NavBar , ...

  5. react+dva+antd+umi项目建立操作流程及知识点总结

    0.1 引用 0.1.1 react官网 0.1.2 dva官网 0.1.3 antd-mobile官网 0.1.4 umijs官网 0.1.5 转载文章-umi操作手册 一.what are the ...

  6. React+dva+webpack+antd-mobile 实战分享(一)

    再看本篇文章之前,本人还是建议想入坑react的童鞋可以选有create-react-app来创建react的项目,因为现在dva和roadhog还不成熟,坑相对要多一些,当然如果你已经做好跳坑的准备 ...

  7. React+dva+webpack+antd-mobile 实战分享(二)

    第一篇 https://segmentfault.com/a/11... 在上一篇文章中教给大家了怎么搭建项目的架子:那么今天我们就来说一下项目里的导航和列表的实现 导航 废话不说啦 下面直接给大家讲 ...

  8. react+dva+antd项目构建

    一:版本升级 首先说明一下这里的dva是最新版: 2.3.2 1.初始化项目构建 npm install dva-cli -g dva -v dva-cli version 注:通过 npm 安装 d ...

  9. react + dva + ant架构后台管理系统(一)

    一.什么是dva dva是蚂蚁金服推出的一个单页应用框架,对 redux, react-router, redux-saga进行了上层封装,没有引入新的概念,但是极大的程度上提升了开发效率: 二.安装 ...

随机推荐

  1. C++初始化列表和大括号中构造的差别

    C++的对象构造函数有两种初始化的方法: 1.初始化列表 2.大括号中面赋值 这两种推荐使用另外一种.原因在于使用初始化列表仅仅须要进行一次初始化.而使用大括号内赋值的话首先须要调用默认构造函数初始化 ...

  2. 解决 ASP.NET 编辑错误"CS0006: 未能找到元数据文件C:\WINDOWS\assembly\GAC_32\System.EnterpriseServices\2.0.0.0__b03f5f7f11d50a3a\System.EnterpriseServices.dll"

    问题背景: 公司最近给我配置了一台新Windows 7旗舰版的电脑,这几天一直在迁移文件,因为新电脑上安装Sqlserver r2失败,解决方法是要安装一个800+MB的安装包 由于最近手上事情比较多 ...

  3. javascript进行遍历

    javascript进行遍历 <!doctype html> <html lang="en"> <head> <meta charset= ...

  4. (转)[Unity3D]UI方案及制作细节(NGUI/EZGUI/原生UI系统) 内附unused-assets清除实例

    转载请留下本文原始链接,谢谢.本文会不定期更新维护,最近更新于2013.09.17.   http://blog.sina.com.cn/s/blog_5b6cb9500101bplv.html   ...

  5. DockerHub基于Github自己主动化构建

    Docker Hub上的自己主动化构建 关于自己主动化构建 自己主动化构建是一个特殊的功能,它同意您在 Docker Hub 上使用构建集群,依据指定的 Dockerfile 或者 GitHub . ...

  6. [Angular-Scaled web] 2. Architecture sub-modules

    Common models will be a sub models for category and bookmarks. Because they are used everywhere. For ...

  7. Jmeter-Maven-Plugin高级应用:Remote Server Configuration

    Remote Server Configuration Pages 12 Home Adding additional libraries to the classpath Advanced Conf ...

  8. 。一个通俗易懂的HMM例子

    原文链接地址:http://www.52nlp.cn/hmm-concrete-example-on-wiki/ Alice 和Bob是好朋友,但是他们离得比较远,每天都是通过电话了解对方那天作了什么 ...

  9. cd命令(转)

    原文地址:http://www.cnblogs.com/peida/archive/2012/10/24/2736501.html Linux cd 命令可以说是Linux中最基本的命令语句,其他的命 ...

  10. MySQL 数据库几种类型

    关系数据库(MySQL.Oracle.SQL Server.DB2.Postgres)键-值存储数据库(Riak和Redis)面向列的数据库(HBase) 面向文档的数据库(MongoDB 和Couc ...