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 ...
随机推荐
- mysql中tinyint、smallint、mediumint,int 和bigint 的区别
1:字节的定义:字节(Byte):字节是通过网络传输信息(或在硬盘或内存中存储信息)的单位. 一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间 2.在mysql中一个汉字占三个 ...
- 学习新框架laravel 5.6 (第二天)-DB,控制器及模型使用
DB类使用,控制器使用及模型使用 链接数据库: /config/database.php /.env DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=330 ...
- Hive(1)-基本概念
一. 什么是Hive Hive:由Facebook开源用于解决海量结构化日志的数据统计. Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能. 本 ...
- ecshop 漏洞如何修复 补丁升级与安全修复详情
目前ecshop漏洞大面积爆发,包括最新版的ecshop 3.0,ecshop 4.0,ecshop2.7.3全系列版本都存在着高危网站漏洞,导致网站被黑,被篡改,被挂马,许多商城系统深受其漏洞的攻击 ...
- Leecode刷题之旅-C语言/python-9.回文数
/* * @lc app=leetcode.cn id=9 lang=c * * [9] 回文数 * * https://leetcode-cn.com/problems/palindrome-num ...
- 嵌入式Linux系统移植(二)——交叉编译工具集
常用工具:readelf.size.nm.strip.strings.objdump.objcopy.addr2line readelf:读可执行文件的elf头 ELF Header: Magic: ...
- 006---hashlib模块
hashlib模块 HASH 一般翻译成散列,也可以叫哈希. 把任意长度的输入通过散列算法变换成固定的长度. 该转换是一种压缩映射 MD5 输入任意长度的信息,经过处理.输出为128位的信息(数字指纹 ...
- Python自动化运维——系统性能信息模块
Infi-chu: http://www.cnblogs.com/Infi-chu/ 模块:psutil psutil是一个跨平台库,可以很轻松的为我们实现获取系统运行的进程和资源利用率等信息. 功能 ...
- UVA11988 Broken Keyboard (a.k.a. Beiju Text)【数组模拟链表】
参考:https://blog.csdn.net/lianai911/article/details/41831645 #include <iostream> #include <c ...
- Altera Stratix IV 命名规则
由于要开发基于DE4平台的应用,应该要了解一下该平台的芯片情况Stratix IV 具体型号为:Stratix IV EP4SGX230KF40C2 命名规范如下 官网资料为:https://www. ...