简介
RxJS(Reactive Extensions for JavaScript)是一个将响应式编程概念引入 JavaScript 的库。它提供了一套强大的工具,用于处理异步数据流和事件。RxJS 的核心思想是Observable,它是一个强大的数据类型,表示随着时间推移的一系列值或事件 ,Observable 的核心关注点:- 创建- 订阅- 执行- 清理
基本概念
- Observable:表示一个可调用的未来值或事件的集合。
- Observer:是一组回调,知道如何监听 Observable 传递的值。
- Subscription:表示 Observable 的执行,主要用于取消执行。
- Operators:是纯函数,允许使用类似于数组方法(如 map、filter、concat、reduce 等)以函数式编程的方式处理集合。
- Subject:等效于 EventEmitter,是将值或事件广播给多个 Observers 的唯一方式。
- Schedulers:是集中的调度程序,用于控制并发,允许我们协调计算的发生时间,例如 setTimeout 或 requestAnimationFrame 等。
用法示例:
注册事件监听器(普通 JavaScript):
javascriptdocument.addEventListener("click", () => console.log("Clicked!"));
使用 RxJS 创建 Observable:
javascriptimport { fromEvent } from "rxjs"; fromEvent(document, "click").subscribe(() => console.log("Clicked!"));
纯函数处理状态:
javascript// 普通 JavaScript let count = 0; document.addEventListener("click", () => console.log(`Clicked ${++count} times`) ); // 使用 RxJS 隔离状态 import { fromEvent, scan } from "rxjs"; fromEvent(document, "click") .pipe(scan((count) => count + 1, 0)) .subscribe((count) => console.log(`Clicked ${count} times`));
控制事件流:
javascript// 普通 JavaScript let count = 0; let rate = 1000; let lastClick = Date.now() - rate; document.addEventListener("click", () => { if (Date.now() - lastClick >= rate) { console.log(`Clicked ${++count} times`); lastClick = Date.now(); } }); // 使用 RxJS import { fromEvent, throttleTime, scan } from "rxjs"; fromEvent(document, "click") .pipe( throttleTime(1000), scan((count) => count + 1, 0) ) .subscribe((count) => console.log(`Clicked ${count} times`));