DvaJS的Effect使用介绍
很多朋友使用dvajs不知道这个Effect是用来干嘛的,今天我们就一起来使用一下:
示例:
app.model({namespace: 'todos',effects: {*addRemote({ payload: todo }, { put, call }) {yield call(addTodo, todo);yield put({ type: 'add', payload: todo });},},
});
小重点来了,请认真看~
Effects
put
用于触发action
yield put({ type: 'todos/add', payload: 'Learn Dva'});
call
用于调用异步逻辑,支持Promise。
const result = yield call(fetch, '/todos');
这个call与JS的call用法大概一致,这个call的第一个参数是你要调用的函数,第二个参数开始是你要传递的参数,可一 一传递。
select
用于从state里获取数据。
const todos = yield select(state => state.todos);
牢记以上三个小东东,你就掌握了effect的精髓了~
拓展:
错误处理
全局错误处理:
dva里,effects和subscriptions的抛错全部会走onError hook,所以可以在onError里统一处理错误。
const app = dva({onError(e, dispatch) {console.log(e.message);},
});
然后effects里的抛错和reject的promise就都会被捕获到了。
本地错误处理
如果需要对某些effects的错误进行特殊处理,需要在effect内部加try catch。
关于JS的try catch的详细用法请看:JavaScript中try{}catch{}finally的使用
app.model({effects: {*addRemote() {try {// Your Code Here} catch(e) {console.log(e.message);}},},
});
接下来我们尝试将异步请求加入中间件,当返回错误时,我们统一到onError hook里进行处理。
异步请求基于 whatwg-fetch,API 详见:https://github.com/github/fetch
GET 和 POST
import request from '../utils/request';// GET
request('/api/todos');// POST
request('/api/todos', {method: 'POST',body: JSON.stringify({ a: 1 }),
});
统一错误处理
假如我们与后端约定当请求出现错误时返回以下格式:
{status: 'error',message: '',
}
那么我们就编辑utils/request.js,加入以下中间件:
function parseErrorMessage({ data }) {const { status, message } = data;if (status === 'error') {throw new Error(message);}return { data };
}
这样我们就完成了错误的统一处理~
DvaJS的Effect使用介绍相关推荐
- 3D建模和3D渲染技术专题一: 热身篇,光线追踪(path Tracing),环境光阴影(ambient occlusion),焦距效果(effect focus)介绍
相比大家都看到过美国迪斯尼或者梦工厂制作的一些动画片,其中很多都是使用3D图像技术来实现的,也就是说根本不用使用摄像机就能拍出一部很好的动画片.现在想开个专题主要介绍一些3D建模和3D渲染. 我之前在 ...
- Android 水波纹点击效果(Ripple Effect)
本文介绍的是Android5.0中其中一个炫酷的效果,点击水波纹扩散效果(Ripple Effect). 以下介绍的实现方式都是调用Android5.0的新API,并非自定义实现,所以只支持在Andr ...
- angular ngrx进阶effect
ngrx github地址 https://github.com/ngrx/platform 里面有一个的例子 ngrx是有几个概念 store state reducer effect action ...
- 互联网寒冬前端社招面试
前言 本人17年毕业,至今一年多工作经验,三月加入找工作的浪潮,深感乏力,好在最后拿到心仪公司的offer,这里整理一下面试过程中的题目(有些忘记了?,简单总结下两家面试体验不错的公司),分享给大家. ...
- Unity2018更新日志大总结
题外话:写篇文章的主要动力来源还是看了Unity2018.3.0发布视频(地址:https://v.qq.com/x/page/z0815ok9b0l.html)之后对我带来的惊喜和冲动.刚好公司项目 ...
- 希尔顿以创纪录的增长和行业领先的倡议献礼公司百年华诞
全球最知名的酒店集团新设酒店的速度超过了每天一家,目前已遍及113个国家和地区,并计划削减50%的环境印迹,实现社会影响力的倍增 弗吉尼亚麦克林恩--(美国商业资讯)--希尔顿(Hilton, NYS ...
- Qt 图形特效(Graphics Effect)介绍
原文链接:Qt 图形特效(Graphics Effect)介绍 QGraphicsEffect也是Qt-4.6引入的一个新功能.它让给图形元素QGraphicsItem增加更佳视觉效果的编程变得非常简 ...
- dvajs的基础介绍及使用
目录结构: 1. 同步操作修改仓库值 src/models/LhTest.ts:你定义仓库的地方 export default {// 仓库存值:state: {global: '这是global', ...
- Unity技术手册 - 初识粒子系统及预览效果【Particle Effect】面板介绍
往期文章分享 点击跳转=><导航贴>- Unity手册,系统实战学习 点击跳转=><导航贴>- Android手册,重温移动开发 本文约3.3千字,新手阅读需要11 ...
最新文章
- Java中头指针和头结点_. 2 . 【严题集 2.1① 描述以下三个概念的区别:头指针、头结点、首元结点(第一个元素结点)。...
- 《深入理解Java虚拟机》读后总结(一)JVM内存模型
- js如何调用h5的日期控价_微信公众号支付H5调用支付解析
- Table 表格导出功能
- T-Sql备份还原数据库
- 用SSAS将多个FLV和MP3合成一个FLV文件
- 2021年总结:缘起性空,归来不少年——回顾这荆棘的一年
- CAD中插入外部参照字体会变繁体_打开CAD图纸发现图形丢失,原来是大意了,四招解决...
- Chango的数学Shader世界(十六)RayTrace三维分形(一)—— ue4中最简单的RayMarch
- 计算机基础知识office软件,计算机基础知识和office办公系列软件的使用(完整版)...
- 局域网计算机名和ip扫描工具,局域网IP扫描器(Advanced IP Scanner)
- Sklearn 划分训练集和测试集
- 拍出来好看的拍照软件?这4款好看好用的App简直赞到爆~
- 迁移学习与小样本学习
- 正则匹配中英文全部特殊符号
- 织梦模板安装后不能显示css的解决办法
- 农业遥感技术科研成果汇总
- CreateCompatibleDC 和 CreateCompatibleBitmap
- 矩阵幂之和(矩阵乘法)
- 多样数字人民币钱包来袭,阻力与动力并存
热门文章
- HTML5系列代码:section标签定义文档中的节(section、区段)
- 比尔·盖茨:AI将为每人创造一个私人助手 科技市场面临洗牌?
- JS/JavaScript中解析JSON --- JSON.parse()、JSON.stringify()以及$.parseJSON()使用详解
- 【1】python爬虫入门,利用bs4以及requests获取静态网页
- DDMS+AndroidStudio实现动态调试
- 你真的懂 Unicode 和 UTF-8 是什么关系吗?来看看这个就彻底懂了!
- Java设计模式——行为型模式:模板方法模式
- 超衍射极限分辨率-STED,SIM,PALM,FPM等
- box-shadow的模糊距离和阴影扩展半径的关系
- 关于JS的逻辑运算题之if的使用