博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RxJS实践,Vue如何集成RxJS
阅读量:7193 次
发布时间:2019-06-29

本文共 2386 字,大约阅读时间需要 7 分钟。

一、

本文章不会对RxJS的原理进行讲解,仅讨论如何在vue中对RxJS进行集成

1、

这是一个台湾开发者编写的关于RxJS的教程,教程涉及到原理解析、简易实现,以及常用operator的介绍。

2、

各种常用操作符的作用与例子,可以结合RxJS的官方文档进行查阅。

二、Vue简单集成RxJS

想要在Vue中使用RxJS,只需要如下引用即可,当然,更多引用方法可以参考官方文档,比如按需引入

import Rx from 'rxjs/Rx'如果你想在vue中使用RxJS的体验更好,这里推荐使用vue-rx这个官方维护的库,使用如下:import Vue from 'vue'import VueRx from 'vue-rx'import Rx from 'rxjs/Rx'Vue.use(VueRx, Rx)

这样,在Vue实例当中就会多了subscriptions这个钩子函数,他的用法类似data,使用如下所示:

如上所示,Rx.Observable.of(23)在被订阅时会被发出值23,this.setName$则是一个流事件,它在domStreams中定义,实际它是一个Subject(具体可查阅RxJS中对Subject的定义),在用户点击按钮的时候则会发出该点击源的数据,如上图的map operator中,会接收数据源发出的event对象(这里我们没有使用该对象,仅仅是返回一个我们定义的字符串'myName'),startWith则是初始化name$的值为空字符串,这里vue-rx已经帮我们做了一个隐式的subscribe绑定,所以值23会马上发出最后赋值到age$上,进而绑定到视图,在这里,我们可以把age$与name$看成是一个有数据源发出的可观察流的结果,这条流是响应的,初始发出的值会经过各种operator处理后响应到页面上。

三、集成vue-rx后使用RxJS

该项目采取了parcel构建、示例包括原生使用与集成vue-rx后使用的对比、事件如何使用、以及常用operator的示例(包含switchMap、concatMap、exhaustMap等的使用场景选择)

1、创建Observeble

创建数据流后,用法类似data,可将数据流的结果跟视图进行绑定

2、事件的使用

// 没有集成vue-rxexport default {  ...  // 需要获取dom,所以必须是mounted后执行才能成功  mounted () {    // fromEvent可以将dom绑定事件并转化成Observable可观察对象    Rx.Observable.fromEvent(this.$refs['btn'], 'click')      .subscribe(e => {        this.data = '成功获取data'      })  },  ... }// 集成vue-rx后

3、switchMap、concatMap、exhaustMap使用

一般这几个operator,会与http请求结合使用,下面我们看些简单用法,点击后将当前流映射成新的流

上面的getCount当成是2秒后响应的http请求,当你连续点击的时候,这几个map operator会有不一样的行为。

比如concatMap在多次点击后会每隔两秒就发送一个递增的count,而switchMap在多次点击后,会只发出最后一次点击的count,比如我点了3次,switchMapCount$在2秒后会显示3,而不是1,exhaustMap则是第一次点击没有响应前不会执行后续的点击操作,直到响应后的点击才有效。

四、关于Rx5与Rx6

上面的仓库是基于Rx5编写的示例,而新出的Rx6在api上有些变动,调用operator的方式不再是链式调用,而是通过传入pipe operator进行组合使用,还有Observable对象的引用也发生了改变,具体可以参考官方文档

原文发布时间为:2018年07月03日
原文作者:bug给我滚
本文来源: 
如需转载请联系原作者
你可能感兴趣的文章
mysql status 详细解释
查看>>
一次线上问题排查所引发的思考
查看>>
无需过分关注Created_tmp_disk_tables
查看>>
px与rem关系及转换
查看>>
硬驱丢失
查看>>
数据库事务处理差异:可提交读和重复读区别
查看>>
与大师Jack Jarkv的交流分享后的思考
查看>>
java——异常
查看>>
matlab从fig文件中提取数据
查看>>
POJ 2488 A Knight's Journey (DFS)
查看>>
jvm内存
查看>>
silverlight在XAML资源中实例化CLR对象
查看>>
Java中的字符串不变性
查看>>
Sql 的 RAISERROR用法
查看>>
Css下拉菜单设置
查看>>
Robot Framework学习笔记(八)------ride标签使用
查看>>
一款简洁而强大的前端框架—JQuery
查看>>
js中的解绑事件
查看>>
ubuntu16.04下编译安装vim8.1
查看>>
DSSM 深度学习解决 NLP 问题:语义相似度计算
查看>>