RxJS 入门心得

RxJS 6 入门

什么是RxJS

RxJS 是一个库,它通过使用 observable 序列来编写异步和基于事件的程序。它提供了一个核心类型 Observable,附属类型 (Observer、 Schedulers、 Subjects) 和受 [Array#extras] 启发的操作符 (map、filter、reduce、every, 等等),这些数组操作符可以把异步事件作为集合来处理。

可以把 RxJS 当做是用来处理事件的 Lodash

ReactiveX 结合了 观察者模式迭代器模式使用集合的函数式编程,以满足以一种理想方式来管理事件序列所需要的一切。

RxJS的核心概念

  • Observable 可观察对象
    • 代表一组未来即将产生的事件或值(被观察的对象)
  • Observer 观察者对象
    • 代表一个用来接收观察结果的对象(接收到的就是事件或值)
  • Subscription 订阅对象
    • 代表正在执行Observable/Observer的执行个体(可用来取消订阅)
  • Operators 操作符
    • 必须拥有函数式编程中所定义的纯函数特性(没有副作用的函数)
    • 主要用来处理一系列的事件或值
    • 产检的操作符包含map, filter, concat, flatMap, switchMap, …
  • Subject 主体对象
    • 如同EventEmitter一样,主要用来广播收到的事件或值给多个Observer(观察者)
  • Schedulers 调度器
    • 调度器控制着何时启动 subscription 和何时发送通知

前五个较常用

入门示例

  • 官网https://v6.rxjs.dev/

  • 打开控制台执行以下代码

    rxjs.interval(500)  // 创建可观察对象
    	.pipe(rxjs.operators.take(4))  // 过滤操作
    	.subscribe(console.log)  // 订阅观察
    
    // 最终返回订阅对象,可通过订阅对象的unsubscribe方法取消订阅
    
  • 事件监听示例

    // 建立可观察的对象Observalbe
    let $click = rxjs.fomEvent(document, 'click');
    // 建立观察者对象
    let observer = { next: (x) => console.log(x) };
    // 建立订阅对象
    let subs = $click.subscribe(observer);
    // 取消订阅
    subs.unsubscribe();
    
  • 过滤操作示例

    // 建立可观察的对象Observalbe
    let $click = rxjs.fomEvent(document, 'click');
    // 使用filter操作符
    const { filter } = rxjs.operators;
    $click = $click.pipe(filter((x) => x.clientX < 1000));
    // 建立订阅对象(直接建立观察者并订阅)
    let subs = $click.subscribe((x) => console.log(x));
    // 取消订阅
    subs.unsubscribe();
    
  • 多个操作符组合

    // 建立可观察的对象Observalbe
    let $click = rxjs.fomEvent(document, 'click');
    // 使用filter操作符 + take操作符
    const { filter, take } = rxjs.operators;
    $click = $click.pipe(
        filter((x) => x.clientX < 1000),
        take(2)
    );
    // 建立订阅对象(直接建立观察者并订阅)
    let subs = $click.subscribe((x) => console.log(x));
    // 取消订阅
    subs.unsubscribe();
    

Subject示例

const { Subject } = rxjs;
const { take } = rxjs.operators;
// 建立主体对象(之后拿这个主体对象进行广播)
let subject = new Subject();
// 建立可观察的Observable对象
let $click = rxjs.fromEvent(document, 'click')
// 设置最多触发两次就完成
$click = $click.pipe(take(2));
// 将$click交由subject主体对象广播(    即是观察者,又是可观察对象)
$click.subscribe(subject);
// 最后再由subject去建立Observer观察者对象
let subs1 = subject.subscribe((x) => console.log(x.client));
let subs2 = subject.subscribe((x) => console.log(x.client));

// 取消订阅
subs1.unsubscribe();
subs2.unsubscribe();

弹珠图

弹珠图(Marble diagrams)就是用图例形象地表示 Observable 和各种操作符的一种方法。
用 - 表示一小段时间,X 代表有错误发生, | 表示结束,() 表示同步发生

RxJS操作符弹珠图解: https://rxmarbles.com/

别的RxJS学习网站: https://reactive.how/

操作符

  • 创建操作符 (Creation Operators)

  • 组合建立操作符 (Join Creation Operators)

    • 可将多个Observable对象组合成一个Observable对象(以组合的形式建立)
    • 常用: combineLatest, concat, forkJoin, merge
    • 其它: race, zip, partition
  • 转换操作符 (Transformation Operators)

    • 负责将Observable传入的数据转成另一种格式
    • 常用: concatMap, concatMapTo, map, mapTo, mergeMap, mergeMapTo, switchMap, switchMapTo, pluck
    • 其它: buffer, bufferCount, bufferTime, bufferToggle, bufferWhen, exhaust, exhaustMap, expand, groupBy, mergeScan, pairwise, partition, scan, window, windowCount, windowTime, windowToggle, windowWhen
  • 过滤操作符 (Filtering Operators)

    • 负责将Observable传入数据过滤/筛选掉
    • 常用: debounce, debounceTime, distinct, filter, first / last, skip / take, throttle, throttleTime
    • 其它: audit, auditTime, distinctUntilChanged, distinctKey, distinctUntilKeyChange, elementAt, ignoreElements, sample, sampleTime, single, skipLast, skipUnit, skipWhile, takeLast, takeUntil
  • 组合操作符 (Join Operators)

    • 负责组合多个已经建立了的Observable
    • 常用: combineAll, concatAll, mergeAll, startWidth
    • 其它: exhaust, widthLatestFrom
  • 多播操作符 (Multicasting Operators)

    • 负责将Observable广播给多位观察者
    • 常用: publish, publishReplay, share
    • 其它: multicast, publishBehavior, publishLast
  • 错误处理操作符 (Error Handling Operators)

    • 负责处理Observable观察过程中出现的例外错误
    • 常用: catchError, retry, retryWhen
  • 工具操作符 (Utility Operators)

    • 负责提供Observable执行过程的工具函数
    • 常用: tap, delay, materialize, timeout, timeoutWidth, toArray
    • 其它: delayWhen, dematerialize, observeOn, subscribeOn, timeInterval, timestamp
  • 条件与布尔操作符 (Conditional and Boolean Operators)

    • 负责计算特定条件并返回布尔值的操作符
    • 常用: defaultEmpty, every, find, findIndex, isEmpty
  • 数学和聚合操作符 (Mathematical and Aggregate Operators)

    • 负责将Observable传来的数据进行数学/聚合运算
    • 常用: count, max, min
    • 其它: reduce

参考资料:

RxJS中文文档
一小时入门RxJS,中文教学放心适用,讲解非常棒
RxJS官网

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值