dva的基本用法
dva是一个状态管理工具,整合了redux,redux-saga,react-router,fetch等框架,目前只能用于react的状态管理
1. dva的models
dva的主要作用还是整合了redux,redux-saga的多文件的分散的写法,将state,reducers,effects这些常用的状态
处理方法集中在一个model中,其形式如下:
import * as userService from '../services/userService' export default {
namespace: "users",
state: {
list:[]
},
reducers: {
save(state, {payload:{data}}) {
state.list = data;
return {...state}
},
removeItem(state, {item}) {
state.list = state.list.filter(function (lItem) {
return item.id !== lItem.id
});
return{...state}
}
},
//effects指的是涉及到异步请求的方法。通常用来调用服务获取数据。
//这里要注意如果effects的方法名与reducers中存在重复的话容易造成死循环。
effects: {
* fetch(payload,{put, call}) {
const data = yield call(userService.fatchData);
yield put({type: "save", payload: data})
},
* fetchRemoveItem({item},{put,call}){
const result = yield call(userService.fetchRemoveItem,item.id);
if (result){
console.log(true);
yield put({type:"removeItem",item})
}else{
console.log(false);
}
}
},
subscriptions: {
setup({dispatch}) {
dispatch({type: 'fetch'})
}
}
}
要在全局的app中注册model
app.model(require('./models/users').default);
2. dva的models的几点说明
namespace: 全局状态的属性,通过global.namespace来访问对应model的state
reducers: 同步修改状态的方法
effects: 异步修改状态的方法,effects中使用的还是generator,与redux-saga中的调用完全一致,
不能直接调用reducers中的同步方法,通过put({'reducer方法名',payload})的形式来
调用reducer中的方法
subscriptions: subscription 是订阅,用于订阅一个数据源,然后根据需要 dispatch 相应的 action。
在 app.start() 时被执行,数据源可以是当前的时间、服务器的websocket 连接、
keyboard 输入、geolocation 变化、history 路由变化等等
这个结构与vuex的结构十分类似
state -> reducers -> effects 对应 state -> mutations -> actions
3. dva中的状态传递
依然采用react-redux的方法,用connect,mapStateToProps来解决
4. dva中的全局事件
dva中提供了一下全局的事件,来解决注册和拦截问题
const app = dva({
history,
initialState,
onError,
onAction,
onStateChange,
onReducer,
onEffect,
onHmr,
extraReducers,
extraEnhancers,
});
onError: effect 执行错误或 subscription 通过 done 主动抛错时触发,可用于管理全局出错状态
onAction: 在 action 被 dispatch 时触发,用于注册 redux 中间件
onStateChange: state 改变时触发,可用于同步 state 到 localStorage,服务器端等
onReducer: 封装 reducer 执行,全局拦截reducer
onEffect: 封装 effect 执行,全局拦截effect
onHmr: 全局处理热替换
extraReducers: 指定额外的 reducer
extraEnhancers: 指定额外的 StoreEnhancer
参考:http://www.cnblogs.com/axel10/archive/2018/03/12/8548305.html
dva的基本用法的更多相关文章
- 【dva】dva的基本用法
services 该文件夹用于存储services,里面的内容为接口调用函数,记得将数据返回.(request是我自己封装函数,也可以用axios原生的函数) const finishTask = { ...
- dva.js 用法总结
dva.js是阿里前端团队开发的一个基于react.redux.webpack的一个前端框架,他能够实现react-redux-webpack环境一键部署,能帮前端工程师节省不少环境搭建的时间.而且经 ...
- 使用dvajs+webpack构建react开发环境
之前我有写过博文介绍过dva.js及其用法,dva.js固然是个非常优秀的框架,但是如果用dev-cli来创建的话就会默认绑定使用roadhog而不是webpack.鉴于roadhog的文档要明显少于 ...
- Ant Design Pro V5 从服务器请求菜单(typescript版)
[前言] 找了很多Admin模板,最后还是看中了AntDesignPro(下文简写antd pro)这个阿里巴巴开源的Admin框架,长这样(还行吧,目前挺主流的): 官网地址:https://pro ...
- dva.js 用法详解:列表展示
本教程案例github:https://github.com/axel10/dva_demo-Counter-and-list/tree/master 这次主要通过在线获取用户数据并且渲染成列表这个案 ...
- dva基本用法
1. npm install -g dva-cli 全局安装dva.2. dva new myApp --demo 创建dva项目.3. cd myApp npm start 启动项目.4. 定义 m ...
- dva.js 上手
来源:https://pengtikui.cn/dva.js-get-started/ ——------------------------------------------------------ ...
- react+dva+antd项目构建
一:版本升级 首先说明一下这里的dva是最新版: 2.3.2 1.初始化项目构建 npm install dva-cli -g dva -v dva-cli version 注:通过 npm 安装 d ...
- React 项目引入 Dva
背景 现在手上在做的 React 项目因为年代久远,用的 Redux,写代码的体验不太好,所以想升级一下引入 dva.以往使用 dva 都是使用 dva-cli 直接生成 dva 项目,或者在使用 a ...
随机推荐
- 2019-04-10 python入门学习——教材和工具准备
# 从决定学习编程语言到正式做出计划挤出空余时间,历经一年半,因工作原因及生活原因不断搁浅,从湖北到浙江再回湖北,暂时稳定在一家小公司,从日常加班中压缩时间学习,于此记录学习进度.学习问题,在此过程中 ...
- Vue 服务器端渲染(一)
什么是服务器端渲染(SSR)? Vue.js 是构建客户端应用程序的框架.默认情况下,可以在浏览器中输出 Vue 组件,进行生成 DOM 和操作 DOM.然而,也可以将同一个组件渲染为服务器端的 HT ...
- python文件操作(2017-8-5)
一.打开文件 open(文件名,模式,编码)#默认模式为只读 f = open("c:/asd.txt") date = f.read() f.close() print(date ...
- ruby mysql2
1. mysql2连接选项 Mysql2::Client.new( :host, :username, :password, :port, :database, :socket = '/path/to ...
- DSP28335的XINTF操作SRAM实验
1. 本次使用三兄弟的XDS28335开发板,研究一下XINTF操作SRAM的代码.哈弗结构,奇怪,DSP28335是哈弗结构,那么数据和程序空间应该独立的,为啥书上说采用统一的寻址方式?估计只是读写 ...
- springmvc基础篇—使用注解方式为前台提供数据
一.新建一个Controller package cn.cfs.springmvc.service; import java.util.ArrayList; import java.util.Hash ...
- 命令行下对apk签名
l创建key,需要用到keytool.exe (位于jdk安装目录\bin目录下),使用产生的key对apk签名用到的是jarsigner.exe (位于jdk安装目录\bin目录下),把上两个软件所 ...
- html基础问题总结
1.reflow 在CSS规范中有一个渲染对象的概念,通常用一个盒子(box, rectangle)来表示.mozilla通过一个叫frame的对象对盒子进行操作.frame主要的动作有三个: 构造f ...
- JMeter学习笔记(九) 参数化4--User Variables
4.User Variables 用户参数 1)线程组右键添加 -> 前置处理器 -> 用户参数 2)配置用户参数 3)添加HTTP请求,引用用户参数,格式: ${} 4)配置线程数 5) ...
- NMON记录服务器各项性能数据
1.将下载下来的nmon文件通过ftp传入服务器下,将nmon权限全开chmod +x nmon 2.查看nmon可以看到如下内容 查看各项指标 输入C,CPU数据 M,内存 N,网络 D,磁盘 T, ...