很多朋友使用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使用介绍相关推荐

  1. 3D建模和3D渲染技术专题一: 热身篇,光线追踪(path Tracing),环境光阴影(ambient occlusion),焦距效果(effect focus)介绍

    相比大家都看到过美国迪斯尼或者梦工厂制作的一些动画片,其中很多都是使用3D图像技术来实现的,也就是说根本不用使用摄像机就能拍出一部很好的动画片.现在想开个专题主要介绍一些3D建模和3D渲染. 我之前在 ...

  2. Android 水波纹点击效果(Ripple Effect)

    本文介绍的是Android5.0中其中一个炫酷的效果,点击水波纹扩散效果(Ripple Effect). 以下介绍的实现方式都是调用Android5.0的新API,并非自定义实现,所以只支持在Andr ...

  3. angular ngrx进阶effect

    ngrx github地址 https://github.com/ngrx/platform 里面有一个的例子 ngrx是有几个概念 store state reducer effect action ...

  4. 互联网寒冬前端社招面试

    前言 本人17年毕业,至今一年多工作经验,三月加入找工作的浪潮,深感乏力,好在最后拿到心仪公司的offer,这里整理一下面试过程中的题目(有些忘记了?,简单总结下两家面试体验不错的公司),分享给大家. ...

  5. Unity2018更新日志大总结

    题外话:写篇文章的主要动力来源还是看了Unity2018.3.0发布视频(地址:https://v.qq.com/x/page/z0815ok9b0l.html)之后对我带来的惊喜和冲动.刚好公司项目 ...

  6. 希尔顿以创纪录的增长和行业领先的倡议献礼公司百年华诞

    全球最知名的酒店集团新设酒店的速度超过了每天一家,目前已遍及113个国家和地区,并计划削减50%的环境印迹,实现社会影响力的倍增 弗吉尼亚麦克林恩--(美国商业资讯)--希尔顿(Hilton, NYS ...

  7. Qt 图形特效(Graphics Effect)介绍

    原文链接:Qt 图形特效(Graphics Effect)介绍 QGraphicsEffect也是Qt-4.6引入的一个新功能.它让给图形元素QGraphicsItem增加更佳视觉效果的编程变得非常简 ...

  8. dvajs的基础介绍及使用

    目录结构: 1. 同步操作修改仓库值 src/models/LhTest.ts:你定义仓库的地方 export default {// 仓库存值:state: {global: '这是global', ...

  9. Unity技术手册 - 初识粒子系统及预览效果【Particle Effect】面板介绍

    往期文章分享 点击跳转=><导航贴>- Unity手册,系统实战学习 点击跳转=><导航贴>- Android手册,重温移动开发 本文约3.3千字,新手阅读需要11 ...

最新文章

  1. Java中头指针和头结点_. 2 . 【严题集 2.1① 描述以下三个概念的区别:头指针、头结点、首元结点(第一个元素结点)。...
  2. 《深入理解Java虚拟机》读后总结(一)JVM内存模型
  3. js如何调用h5的日期控价_微信公众号支付H5调用支付解析
  4. Table 表格导出功能
  5. T-Sql备份还原数据库
  6. 用SSAS将多个FLV和MP3合成一个FLV文件
  7. 2021年总结:缘起性空,归来不少年——回顾这荆棘的一年
  8. CAD中插入外部参照字体会变繁体_打开CAD图纸发现图形丢失,原来是大意了,四招解决...
  9. Chango的数学Shader世界(十六)RayTrace三维分形(一)—— ue4中最简单的RayMarch
  10. 计算机基础知识office软件,计算机基础知识和office办公系列软件的使用(完整版)...
  11. 局域网计算机名和ip扫描工具,局域网IP扫描器(Advanced IP Scanner)
  12. Sklearn 划分训练集和测试集
  13. 拍出来好看的拍照软件?这4款好看好用的App简直赞到爆~
  14. 迁移学习与小样本学习
  15. 正则匹配中英文全部特殊符号
  16. 织梦模板安装后不能显示css的解决办法
  17. 农业遥感技术科研成果汇总
  18. CreateCompatibleDC 和 CreateCompatibleBitmap
  19. 矩阵幂之和(矩阵乘法)
  20. 多样数字人民币钱包来袭,阻力与动力并存

热门文章

  1. HTML5系列代码:section标签定义文档中的节(section、区段)
  2. 比尔·盖茨:AI将为每人创造一个私人助手 科技市场面临洗牌?
  3. JS/JavaScript中解析JSON --- JSON.parse()、JSON.stringify()以及$.parseJSON()使用详解
  4. 【1】python爬虫入门,利用bs4以及requests获取静态网页
  5. DDMS+AndroidStudio实现动态调试
  6. 你真的懂 Unicode 和 UTF-8 是什么关系吗?来看看这个就彻底懂了!
  7. Java设计模式——行为型模式:模板方法模式
  8. 超衍射极限分辨率-STED,SIM,PALM,FPM等
  9. box-shadow的模糊距离和阴影扩展半径的关系
  10. 关于JS的逻辑运算题之if的使用