关于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 相关文章推荐
jquery 学习之二 属性 文本与值(text,val)
Nov 25 Javascript
JQuery触发事件例如click
Sep 11 Javascript
JavaScript实现网页对象拖放功能的方法
Apr 15 Javascript
jQuery实现带滚动导航效果的全屏滚动相册实例
Jun 19 Javascript
JavaScript实现点击按钮就复制当前网址
Dec 14 Javascript
AngularJS中使用HTML5手机摄像头拍照
Feb 22 Javascript
String字符串截取的四种方式总结
Nov 28 Javascript
js实现表单提交后不重新刷新当前页面
Nov 30 Javascript
浅谈jQuery before和insertBefore的区别
Dec 04 Javascript
详解angularJS动态生成的页面中ng-click无效解决办法
Jun 19 Javascript
AngularJS发送异步Get/Post请求方法
Aug 13 Javascript
解决antd的Form组件setFieldsValue的警告问题
Oct 29 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
《Re:从零开始的异世界生活 冰结之绊》
2020/04/09 日漫
PHP 第二节 数据类型之数组
2012/04/28 PHP
PHP中批量生成静态html(命令行下运行PHP)
2014/04/19 PHP
php超快高效率统计大文件行数
2015/07/05 PHP
PHP使用pear自带的mail类库发邮件的方法
2015/07/08 PHP
TP5(thinkPHP5)框架使用ajax实现与后台数据交互的方法小结
2020/02/10 PHP
js 函数调用模式小结
2011/12/26 Javascript
js获取url参数值的两种方式
2013/09/10 Javascript
浅谈JavaScript中指针和地址
2015/07/26 Javascript
arcgis for js 修改infowindow样式的方法
2016/11/02 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图的组合双轴图效果示例【附demo源码下载】
2017/03/09 Javascript
微信小程序学习之数据处理详解
2017/07/05 Javascript
Angular.js中window.onload(),$(document).ready()的写法浅析
2017/09/28 Javascript
Vue实现active点击切换方法
2018/03/16 Javascript
javascript之分片上传,断点续传的实际项目实现详解
2019/09/05 Javascript
vue如何实现动态加载脚本
2020/02/05 Javascript
微信小程序开发(二):页面跳转并传参操作示例
2020/06/01 Javascript
python利用hook技术破解https的实例代码
2013/03/25 Python
Python 实现数据库(SQL)更新脚本的生成方法
2017/07/09 Python
python pandas读取csv后,获取列标签的方法
2018/11/12 Python
解决Python print输出不换行没空格的问题
2018/11/14 Python
详解Python3 中的字符串格式化语法
2020/01/15 Python
服务器端jupyter notebook映射到本地浏览器的操作
2020/04/14 Python
Python的Django框架实现数据库查询(不返回QuerySet的方法)
2020/05/19 Python
2021年的Python 时间轴和即将推出的功能详解
2020/07/27 Python
python简单利用字典破解zip文件口令
2020/09/07 Python
Python操作word文档插入图片和表格的实例演示
2020/10/25 Python
eBay法国购物网站:eBay.fr
2017/10/21 全球购物
巴西箱包、背包、钱包和旅行配件购物网站:Inovathi
2019/12/14 全球购物
国际花店:Pickup Flowers
2020/04/10 全球购物
专科毕业生自我鉴定
2013/12/01 职场文书
建筑专业毕业生求职信
2014/09/30 职场文书
学校纪律作风整改措施思想汇报
2014/10/11 职场文书
2014年小学教师工作总结
2014/11/10 职场文书
Pytorch可视化的几种实现方法
2021/06/10 Python
启动Tomcat时出现大量乱码的解决方法
2021/06/21 Java/Android