关于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实现多级下拉框无刷新的联动
Dec 22 Javascript
JavaScript中使用构造器创建对象无需new的情况说明
Mar 01 Javascript
jQuery Mobile页面跳转后未加载外部JS原因分析及解决
Mar 18 Javascript
javascript设置连续两次点击按钮时间间隔的方法
Oct 28 Javascript
jQuery判断对象是否存在的方法
Feb 05 Javascript
详解基于Bootstrap扁平化的后台框架Ace
Nov 27 Javascript
JavaScript 正则表达式中global模式的特性
Feb 25 Javascript
Angular1.x复杂指令实例详解
Mar 01 Javascript
webpack配置的最佳实践分享
Apr 21 Javascript
select标签设置默认选中的选项方法
Mar 02 Javascript
浅谈Vue页面级缓存解决方案feb-alive(上)
Apr 14 Javascript
解决layer.confirm快速点击会重复触发事件的问题
Sep 23 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
一个程序下载的管理程序(二)
2006/10/09 PHP
Yii2――使用数据库操作汇总(增删查改、事务)
2016/12/19 PHP
php的RSA加密解密算法原理与用法分析
2020/01/23 PHP
Javascript 引擎工作机制详解
2016/11/30 Javascript
Vuex之理解Mutations的用法实例
2017/04/19 Javascript
详解angular中的作用域及继承
2017/05/31 Javascript
微信小程序 上传头像的实例详解
2017/10/27 Javascript
mac中利用NVM管理不同node版本的方法详解
2017/11/08 Javascript
boostrap模态框二次弹出清空原有内容的方法
2018/08/10 Javascript
cdn模式下vue的基本用法详解
2018/10/07 Javascript
使用Angular 6创建各种动画效果的方法
2018/10/10 Javascript
JS立即执行函数功能与用法分析
2019/01/15 Javascript
node 解析图片二维码的内容代码实例
2019/09/11 Javascript
微信小程序进入广告实现代码实例
2019/09/19 Javascript
layui数据表格 table.render 报错的解决方法
2019/09/29 Javascript
axios 实现post请求时把对象obj数据转为formdata
2019/10/31 Javascript
vue使用map代替Aarry数组循环遍历的方法
2020/04/30 Javascript
从零学Python之入门(五)缩进和选择
2014/05/27 Python
在Python的Flask框架中使用模版的入门教程
2015/04/20 Python
python实现汉诺塔方法汇总
2016/07/25 Python
pandas 空的dataframe 插入列名的示例
2018/10/30 Python
Python-for循环的内部机制
2020/06/12 Python
Python 串口通信的实现
2020/09/29 Python
Python用摘要算法生成token及检验token的示例代码
2020/12/01 Python
python+selenium实现12306模拟登录的步骤
2021/01/21 Python
Bootstrap File Input文件上传组件
2020/12/01 HTML / CSS
意大利值得信赖的在线超级药房:PillolaStore
2020/02/05 全球购物
State Cashmere官网:半零售价可持续蒙古羊绒
2020/02/26 全球购物
5个HTML5的常用本地存储方式详解与介绍
2021/03/27 HTML / CSS
安踏广告词改编版
2014/03/21 职场文书
高中课前三分钟演讲稿
2014/08/18 职场文书
3.15消费者权益日活动总结
2015/02/09 职场文书
Python Pandas常用函数方法总结
2021/06/15 Python
MySQL 十大常用字符串函数详解
2021/06/30 MySQL
python实现MD5进行文件去重的示例代码
2021/07/09 Python
Pandas搭配lambda组合使用详解
2022/01/22 Python