dva的用法_dva 的基本用法
dva 的基本用法
dva 是一个状态管理工具, 整合了 redux,redux-saga,react-router,fetch 等框架, 目前只能用于 react 的状态管理
1. dva 的 models
dva 的主要作用还是整合了 redux,redux-saga 的多文件的分散的写法, 将 state,reducers,effects 这些常用的状态
处理方法集中在一个 model 中, 其形式如下:import*asuserServicefrom'../services/userService'
exportdefault{
namespace:"users",
state:{list:[]
},
reducers:{
save(state,{payload:{data}}){
state.list=data;
return{...state}
},
removeItem(state,{item}){
state.list=state.list.filter(function(lItem){
returnitem.id!==lItem.id
});
return{...state}
}
},
//effects 指的是涉及到异步请求的方法. 通常用来调用服务获取数据.
// 这里要注意如果 effects 的方法名与 reducers 中存在重复的话容易造成死循环.
effects:{
*fetch(payload,{put,call}){
constdata=yieldcall(userService.fatchData);
yieldput({type:"save",payload:data})
},
*fetchRemoveItem({item},{put,call}){
constresult=yieldcall(userService.fetchRemoveItem,item.id);
if(result){
console.log(true);
yieldput({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 中提供了一下全局的事件, 来解决注册和拦截问题constapp=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
来源: http://www.bubuko.com/infodetail-2735360.html
dva的用法_dva 的基本用法相关推荐
- dva的用法_dva的基本用法
dva是一个状态管理工具,整合了redux,redux-saga,react-router,fetch等框架,目前只能用于react的状态管理 1. dva的models dva的主要作用还是整合了r ...
- Compound Words UVA - 10391(c++用法中substr函数用法+map实现)
题意: 给出字典中一堆单词,单词的输入方式是以字典序输入的.问:在这一堆单词中,有那些单词是通过其它两个单词组合而来的.按字典序升序输出这些单词. 题目: You are to find all th ...
- stpcpy和stpncpy用法 strcpy和strncpy用法
文章目录 strncpy, strncpy_s参考文档用法 strcpy, strncpy实例 strcpy, strncpy用法举例 运行结果 stpcpy()和stpncpy()用法上的区别(C语 ...
- java中extends用法_JAVA的extends用法
理解继承是理解面向对象程序设计的关键.在Java中,通过关键字extends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类).在Java中不允许多继承. (1)继承 cla ...
- map函数作用c语言,c语言中map的用法:map基本用法
c++中map容器提供一个键值对容器,那么你知道map的用法有哪些吗,下面秋天网 Qiutian.ZqNF.Com小编就跟你们详细介绍下c语言中map的用法,希望对你们有用. c语言中map的用法:m ...
- c 语言中set的用法,C++中set用法详解
1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构 ...
- Spring 异步@Async注解用法 Spring @Async注解用法总结 Spring @Async基本用法示例
Spring 异步@Async注解用法 Spring @Async注解用法总结 Spring @Async基本用法示例 一.概述 在日常开发的工作中,经常会使用异步进行开发.Spring 提供一个简单 ...
- C语言offsetof用法以及其扩展用法
标题C语言offsetof用法以及其扩展用法 offsetof由于不是标准库的函数,所以得查一下,在stddef.h中,搜索一下编译器的这个头文件位置: 暴力一点,直接在根目录下搜索,find -na ...
- php的uniqid函数,PHP之uniqid()函数用法,phpuniqid函数用法_PHP教程
PHP之uniqid()函数用法,phpuniqid函数用法 本文实例讲述了PHP中uniqid()函数的用法.分享给大家供大家参考.具体方法分析如下: uniqid() 函数基于以微秒计的当前时间, ...
最新文章
- ssm启动报错cannot find class_SSM整合补充 RBAC(权限控制)过滤器
- 虚拟现实和元宇宙的最大短板在哪里?
- python对象一定要删除引用吗_Python:删除自引用对象
- python分位数回归模型_如何理解分位数回归风险价值 (VaR) 模型?
- HDU - 6214 Smallest Minimum Cut(最小割最少边数)
- 2018/7/6-纪中某C组题【jzoj1192,jzoj1397,jzoj1736】
- windows副本不是正版怎么办_盗版系统总是崩溃?别着急,让我来告诉你正版系统怎么下载...
- jquery 一些特效使用
- ArrayList 与linkedlist区别
- java 隐藏域_java 隐藏域传值
- Windows文本文件编码
- 互联网络层的内核实现[内核中的路由机制]
- 【私有,不喜勿入】健康
- 软件设计 -- 数据流图,数据字典,ER图
- Spring Cloud Gateway实战之三:动态路由
- 《C++ Primer》第5章 5.2节习题答案
- 【数据库笔记】高性能MySQL:chapter 5 创建高性能的索引
- 做网赚如何引流,这些方法你都试了么
- ATFX:离岸人民币破7.3, 调控思路下,人民银行或有大动作
- c# + ArcGIS Engine = 简易桌面端地理信息系统
热门文章
- 2021亚太数学建模竞赛A题简要思路
- java早餐点餐外卖网站系统
- comsume(comsumer怎么读)
- 十二经纳干支歌,十二经纳地支歌
- 在vsphere client 给esxi上的虚拟机增加U盘识别
- JavaScript——与君初相识
- python迅雷下载任务出错_迅雷下载“任务出错”最新解决方法
- 回归云平台的本质,通过平台+应用模式实现软件资源线上共享
- dell服务器 pe系统安装教程,戴尔n4050 PE安装win10系统图文教程
- 计算机学院文化长廊,计算机学院2019年寝室文化节动员大会顺利召开