关于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 相关文章推荐
javascript 触发事件列表 比较不错
Sep 03 Javascript
jQuery Dialog 弹出层对话框插件
Aug 09 Javascript
JS命名空间的另一种实现
Aug 09 Javascript
表单序列化与jq中的serialize使用示例
Feb 21 Javascript
javascript单页面手势滑屏切换原理详解
Mar 21 Javascript
EasyUi 打开对话框后控件赋值及赋值后不显示的问题解决办法
Jan 19 Javascript
js 将input框中的输入自动转化成半角大写(税号输入框)
Feb 16 Javascript
Webpack 服务器端代码打包的示例代码
Sep 19 Javascript
动态统计当前输入内容的字节、字符数的实例详解
Oct 27 Javascript
layui问题之模拟select点击事件的实例讲解
Aug 15 Javascript
JavaScript实现省份城市的三级联动
Feb 11 Javascript
JavaScript进阶(四)原型与原型链用法实例分析
May 09 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 email邮箱正则
2008/10/08 PHP
php $_SERVER当前完整url的写法
2009/11/12 PHP
javascript应用:Iframe自适应其加载的内容高度
2007/04/10 Javascript
jquery操作select option 的代码小结
2011/06/21 Javascript
jQuery Tools tab(幻灯片)
2012/07/14 Javascript
Javascript排序算法之合并排序(归并排序)的2个例子
2014/04/04 Javascript
readonly和disabled属性的区别
2015/07/26 Javascript
jquery实现点击查看更多内容控制段落文字展开折叠效果
2015/08/06 Javascript
基于jquery实现全屏滚动效果
2015/11/26 Javascript
Vuejs第十二篇之动态组件全面解析
2016/09/09 Javascript
整理关于Bootstrap警示框的慕课笔记
2017/03/29 Javascript
Flask中获取小程序Request数据的两种方法
2017/05/12 Javascript
Three.js 再探 - 写一个微信跳一跳极简版游戏
2018/01/04 Javascript
javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
2018/08/01 Javascript
vue将单页面改造成多页面应用的方法
2018/11/25 Javascript
Vue v-for中的 input 或 select的值发生改变时触发事件操作
2020/08/31 Javascript
[02:25]DOTA2英雄基础教程 虚空假面
2014/01/02 DOTA
[55:44]完美世界DOTA2联赛决赛 FTD vs Phoenix 第二场 11.08
2020/11/11 DOTA
pycharm 使用心得(六)进行简单的数据库管理
2014/06/06 Python
Python实现的数据结构与算法之链表详解
2015/04/22 Python
python开发中module模块用法实例分析
2015/11/12 Python
python实现实时监控文件的方法
2016/08/26 Python
Python 通过调用接口获取公交信息的实例
2018/12/17 Python
pycharm 将python文件打包为exe格式的方法
2019/01/16 Python
python读写csv文件并增加行列的实例代码
2019/08/01 Python
浅谈Tensorflow 动态双向RNN的输出问题
2020/01/20 Python
python实现密码强度校验
2020/03/18 Python
贝玲妃美国官方网站:Benefit美国
2016/08/28 全球购物
激励员工的口号
2014/06/16 职场文书
心理咨询专业自荐信
2014/07/07 职场文书
企业党员个人自我评价
2014/09/20 职场文书
2014最新版群众路线四风整改措施
2014/09/24 职场文书
暖春观后感
2015/06/08 职场文书
民事调解协议书
2016/03/21 职场文书
三年级作文之小小梦想
2019/12/06 职场文书
python用字节处理文件实例讲解
2021/04/13 Python