关于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 相关文章推荐
推荐40个简单的 jQuery 导航插件和教程(下篇)
Sep 14 Javascript
javascript内置对象操作详解
Feb 04 Javascript
在JavaScript中访问字符串的子串
Jul 07 Javascript
jQuery获取URL请求参数的方法
Jul 18 Javascript
jQuery实现的产品自动360度旋转展示特效源码分享
Aug 21 Javascript
浅谈window.onbeforeunload() 事件调用ajax
Jun 29 Javascript
前端开发之CSS原理详解
Mar 11 Javascript
详解http访问解析流程原理
Oct 18 Javascript
Vue工程模板文件 webpack打包配置方法
Dec 26 Javascript
vue中使用axios post上传头像/图片并实时显示到页面的方法
Sep 27 Javascript
自定义javascript验证框架示例【附源码下载】
May 31 Javascript
javascript设计模式 ? 原型模式原理与应用实例分析
Apr 10 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最常用的2种设计模式工厂模式和单例模式介绍
2012/08/14 PHP
PHP保留两位小数并且四舍五入及不四舍五入的方法
2013/09/22 PHP
使用PHP生成二维码的方法汇总
2015/07/22 PHP
对比PHP对MySQL的缓冲查询和无缓冲查询
2016/07/01 PHP
js下判断 iframe 是否加载完成的完美方法
2010/10/26 Javascript
js中回调函数的学习笔记
2014/07/31 Javascript
使用jsonp完美解决跨域问题
2014/11/27 Javascript
js兼容火狐显示上传图片预览效果的方法
2015/05/21 Javascript
javascript字符串函数汇总
2015/12/06 Javascript
JavaScript为事件句柄绑定监听函数实例详解
2015/12/15 Javascript
逻辑表达式中与或非的用法详解
2016/06/06 Javascript
Js 获取、判断浏览器版本信息的简单方法
2016/08/08 Javascript
Angular2入门--架构总览
2017/03/29 Javascript
JS中IP地址与整数相互转换的实现代码
2017/04/10 Javascript
在knockoutjs 上自己实现的flux(实例讲解)
2017/12/18 Javascript
node.js遍历目录的方法示例
2018/08/01 Javascript
jQuery无冲突模式详解
2019/01/17 jQuery
vue以组件或者插件的形式实现throttle或者debounce
2019/05/22 Javascript
如何让微信小程序页面之间的通信不再变困难
2019/06/03 Javascript
JQuery样式与属性设置方法分析
2019/12/07 jQuery
Jquery Fade用法详解
2020/11/06 jQuery
python实现颜色rgb和hex相互转换的函数
2015/03/19 Python
Python备份目录及目录下的全部内容的实现方法
2016/06/12 Python
python3.6使用urllib完成下载的实例
2018/12/19 Python
python random从集合中随机选择元素的方法
2019/01/23 Python
详解python项目实战:模拟登陆CSDN
2019/04/04 Python
如何基于Python + requests实现发送HTTP请求
2020/01/13 Python
python itsdangerous模块的具体使用方法
2020/02/17 Python
python pyqtgraph 保存图片到本地的实例
2020/03/14 Python
借助HTML5 Canvas来绘制三角形和矩形等多边形的方法
2016/03/14 HTML / CSS
使用 HTML5 Canvas 制作水波纹效果点击图片就会触发
2014/09/15 HTML / CSS
.net面试题
2015/12/22 面试题
静态成员和非静态成员的区别
2012/05/12 面试题
Python进度条的使用
2021/05/17 Python
利用For循环遍历Python字典的三种方法实例
2022/03/25 Python
Win11黑色桌面背景怎么办?Win11黑色壁纸解决方法汇总
2022/04/05 数码科技