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 的基本用法相关推荐

  1. dva的用法_dva的基本用法

    dva是一个状态管理工具,整合了redux,redux-saga,react-router,fetch等框架,目前只能用于react的状态管理 1. dva的models dva的主要作用还是整合了r ...

  2. Compound Words UVA - 10391(c++用法中substr函数用法+map实现)

    题意: 给出字典中一堆单词,单词的输入方式是以字典序输入的.问:在这一堆单词中,有那些单词是通过其它两个单词组合而来的.按字典序升序输出这些单词. 题目: You are to find all th ...

  3. stpcpy和stpncpy用法 strcpy和strncpy用法

    文章目录 strncpy, strncpy_s参考文档用法 strcpy, strncpy实例 strcpy, strncpy用法举例 运行结果 stpcpy()和stpncpy()用法上的区别(C语 ...

  4. java中extends用法_JAVA的extends用法

    理解继承是理解面向对象程序设计的关键.在Java中,通过关键字extends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类).在Java中不允许多继承. (1)继承 cla ...

  5. map函数作用c语言,c语言中map的用法:map基本用法

    c++中map容器提供一个键值对容器,那么你知道map的用法有哪些吗,下面秋天网 Qiutian.ZqNF.Com小编就跟你们详细介绍下c语言中map的用法,希望对你们有用. c语言中map的用法:m ...

  6. c 语言中set的用法,C++中set用法详解

    1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构 ...

  7. Spring 异步@Async注解用法 Spring @Async注解用法总结 Spring @Async基本用法示例

    Spring 异步@Async注解用法 Spring @Async注解用法总结 Spring @Async基本用法示例 一.概述 在日常开发的工作中,经常会使用异步进行开发.Spring 提供一个简单 ...

  8. C语言offsetof用法以及其扩展用法

    标题C语言offsetof用法以及其扩展用法 offsetof由于不是标准库的函数,所以得查一下,在stddef.h中,搜索一下编译器的这个头文件位置: 暴力一点,直接在根目录下搜索,find -na ...

  9. php的uniqid函数,PHP之uniqid()函数用法,phpuniqid函数用法_PHP教程

    PHP之uniqid()函数用法,phpuniqid函数用法 本文实例讲述了PHP中uniqid()函数的用法.分享给大家供大家参考.具体方法分析如下: uniqid() 函数基于以微秒计的当前时间, ...

最新文章

  1. ssm启动报错cannot find class_SSM整合补充 RBAC(权限控制)过滤器
  2. 虚拟现实和元宇宙的最大短板在哪里?
  3. python对象一定要删除引用吗_Python:删除自引用对象
  4. python分位数回归模型_如何理解分位数回归风险价值 (VaR) 模型?
  5. HDU - 6214 Smallest Minimum Cut(最小割最少边数)
  6. 2018/7/6-纪中某C组题【jzoj1192,jzoj1397,jzoj1736】
  7. windows副本不是正版怎么办_盗版系统总是崩溃?别着急,让我来告诉你正版系统怎么下载...
  8. jquery 一些特效使用
  9. ArrayList 与linkedlist区别
  10. java 隐藏域_java 隐藏域传值
  11. Windows文本文件编码
  12. 互联网络层的内核实现[内核中的路由机制]
  13. 【私有,不喜勿入】健康
  14. 软件设计 -- 数据流图,数据字典,ER图
  15. Spring Cloud Gateway实战之三:动态路由
  16. 《C++ Primer》第5章 5.2节习题答案
  17. 【数据库笔记】高性能MySQL:chapter 5 创建高性能的索引
  18. 做网赚如何引流,这些方法你都试了么
  19. ATFX:离岸人民币破7.3, 调控思路下,人民银行或有大动作
  20. c# + ArcGIS Engine = 简易桌面端地理信息系统

热门文章

  1. 2021亚太数学建模竞赛A题简要思路
  2. java早餐点餐外卖网站系统
  3. comsume(comsumer怎么读)
  4. 十二经纳干支歌,十二经纳地支歌
  5. 在vsphere client 给esxi上的虚拟机增加U盘识别
  6. JavaScript——与君初相识
  7. python迅雷下载任务出错_迅雷下载“任务出错”最新解决方法
  8. 回归云平台的本质,通过平台+应用模式实现软件资源线上共享
  9. dell服务器 pe系统安装教程,戴尔n4050 PE安装win10系统图文教程
  10. 计算机学院文化长廊,计算机学院2019年寝室文化节动员大会顺利召开