关于redux-saga中take使用方法详解


Posted in Javascript onFebruary 27, 2018

本文介绍了关于redux-saga中take使用方法详解,分享给大家,具体如下:

带来一个自己研究好久的API使用方法.

redux-saga中effect中take这个API使用方式,用的多的是call,put,select,但take这个平常还真没什么机会用上,也不清楚在哪里使用才好,不管怎么样,既然是redux-saga写出来的,肯定是有他的用法的,不管37 21,先学会使用方法再说.

先看看介绍:

take

take的表现同takeEvery一样,都是监听某个action,但与takeEvery不同的是,他不是每次action触发的时候都相应,而只是在执行顺序执行到take语句时才会相应action。

当在genetator中使用take语句等待action时,generator被阻塞,等待action被分发,然后继续往下执行。

takeEvery只是监听每个action,然后执行处理函数。对于何时相应action和 如何相应action,takeEvery并没有控制权。

而take则不一样,我们可以在generator函数中决定何时相应一个action,以及一个action被触发后做什么操作。

最大区别:take只有在执行流达到时才会响应对应的action,而takeEvery则一经注册,都会响应action。

上代码:

effects: {
 * takeDemo1({payload}, {put, call, take}) {

 },
 * takeInputChange({payload}, {put, call, take,takeEvery,takeLatest}) {
  // yield call(delay,1000);
  console.log(takeEvery);
  // for (let i = 0; i < 3; i++) {
   const action = yield take('takeBlur'});
   console.log(action, 'action');
   console.log(payload.value);
  // }

 },
 * takeBlur() {
  console.log(323)
 },
}
changeHandle(e){
 this.props.dispatch({type:'takeInputChange',payload:{value:e.target.value}})
}
blur(){
 this.props.dispatch({type:'takeBlur'})
}
render() {

 return (
  <div style={{position: 'relative'}}>
   <Input onChange={this.changeHandle.bind(this)} onBlur={this.blur.bind(this)}/> 
  </div>
  )
}

页面上有一个input,绑定了两个方法,第一个是onchange方法,一个是onBlur方法,

当input值改变 的时候,通过 this.props.dispatch({type:'takeInputChange'}),调用此函数,但是因为遇到了take的方法,不能往下继续执行了(暂停了),如果这里的take换成了takeEvery则大有不同,函数会继续执行,就是下面的两个console会执行,

而takeEvery执行的方法则放在它的回调里了,看下面代码

yield takeEvery('takeBlur',()=>{console.log(payload.value)});

需要强调的是每次input改变的时候都会触发这个函数,所以每次改变的时候,会看到控制台都会打印一次console里的值.

接下来,如果input失去焦点后,则会执行onBlur方法,此时调用this.props.dispatch({type:'takeBlur'});

在takeInputChange里的take因为监听到了takeBlur这个action,那么就会继续执行需要执行的内容.

这个take反正是研究了还算长的时间,不知道这个东西在哪些时候能够派的上用场

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
解决 FireFox 下[使用event很麻烦] 的问题.
Aug 22 Javascript
js 小数取整的函数
May 10 Javascript
JS基础之undefined与null的区别分析
Aug 08 Javascript
javascript 使td内容不换行不撑开
Nov 29 Javascript
js读写(删除)Cookie实例详解
Apr 17 Javascript
JS小功能(setInterval实现图片效果显示时间)实例代码
Nov 28 Javascript
jquery获取URL中参数解决中文乱码问题的两种方法
Dec 18 Javascript
jQuery判断当前点击的是第几个li的代码
Sep 26 Javascript
jQuery的promise与deferred对象在异步回调中的作用
May 03 Javascript
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(二)
May 11 Javascript
vue中如何实现pdf文件预览的方法
Jul 12 Javascript
JS实现的碰撞检测与周期移动完整示例
Sep 02 Javascript
浅析Visual Studio Code断点调试Vue
Feb 27 #Javascript
angularJs 表格添加删除修改查询方法
Feb 27 #Javascript
ExtJs整合Echarts的示例代码
Feb 27 #Javascript
angularJS实现动态添加,删除div方法
Feb 27 #Javascript
浅谈React中的元素、组件、实例和节点
Feb 27 #Javascript
AngularJS动态添加数据并删除的实例
Feb 27 #Javascript
JS严格模式知识点总结
Feb 27 #Javascript
You might like
实现php加速的eAccelerator dll支持文件打包下载
2007/09/30 PHP
CodeIgniter框架验证码类库文件与用法示例
2017/03/18 PHP
PHP 文件上传限制问题
2019/09/01 PHP
用javascript实现页面打印的三种方法
2007/03/05 Javascript
jquery ajax 同步异步的执行示例代码
2010/06/23 Javascript
JS实现的网页背景闪电闪烁效果代码
2015/10/17 Javascript
js获取本机操作系统类型的两种方法
2015/12/19 Javascript
JavaScript的函数式编程基础指南
2016/03/19 Javascript
javascript比较语义化版本号的实现代码
2016/09/09 Javascript
jQuery与js实现颜色渐变的方法
2016/12/30 Javascript
jquery广告无缝轮播实例
2017/01/05 Javascript
解析jquery easyui tree异步加载子节点问题
2017/03/08 Javascript
AngularJS前端页面操作之用户修改密码功能示例
2017/03/27 Javascript
浅谈Angular 的变化检测的方法
2018/03/01 Javascript
vue结合element-ui使用示例
2019/01/24 Javascript
如何将百度地图包装成Vue的组件的方法步骤
2019/02/12 Javascript
vue语法自动转typescript(解放双手)
2019/09/18 Javascript
详解vue-template-admin三级路由无法缓存的解决方案
2020/03/10 Javascript
详解Python3.1版本带来的核心变化
2015/04/07 Python
python中文编码与json中文输出问题详解
2018/08/24 Python
Python爬取知乎图片代码实现解析
2019/09/17 Python
使用python远程操作linux过程解析
2019/12/04 Python
pytorch实现mnist数据集的图像可视化及保存
2020/01/14 Python
Pyqt5 关于流式布局和滚动条的综合使用示例代码
2020/03/24 Python
Python使用monkey.patch_all()解决协程阻塞问题
2020/04/15 Python
python要安装在哪个盘
2020/06/15 Python
学点简单的Django之第一个Django程序的实现
2021/02/24 Python
HTML5 客户端数据库简易使用:IndexedDB
2019/12/19 HTML / CSS
巴西宠物店在线:Geração Pet
2017/05/31 全球购物
澳大利亚最大的女装零售商:Millers
2017/09/10 全球购物
Ryderwear澳洲官网:澳大利亚高端健身训练装备品牌
2018/09/18 全球购物
System.Array.CopyTo()和System.Array.Clone()有什么区别
2016/06/20 面试题
五一晚会主持词
2015/07/01 职场文书
人身损害赔偿协议书
2016/03/22 职场文书
Java实战之用Swing实现通讯录管理系统
2021/06/13 Java/Android
Java实现添加条码或二维码到Word文档
2022/06/01 Java/Android