RxJS 让代码更纯粹, 让状态更易控制

下面是一个计数器的常规写法, 可以看到, count 在函数体之外, 这个 count 就是一个状态, 它受到 click 监听函数的控制, 相当于是分开的两部分, 这种看起来没啥大毛病, 但并不优雅.
如果状态变多了, 或者它们受多个来源控制, 那状态就有可能乱掉, 容易引发混乱.

let count = 0;
document.addEventListener("click", () => {
  document.body.innerText = String(count++);
});

下面是 RxJS 版的, 可以看到, 它干掉了"自由变量" count, 让 count 成为其数据流中的一个中间环节自行产生. scan 方法的作用不明, 从实际行为来看, 应该是类似定义了一个中间状态, 这个状态随着事件的触发, 保留了上一次的值.
这个就可以延伸出来了, 比如: 请求一个接口, 用 scan 给他做一些返回值的处理\赋值等等. scan 是扫描的意思, 也能辅助理解.

import { fromEvent, scan } from "rxjs";

fromEvent(document, "click")
  .pipe(scan((count) => count + 1, 0))
  .subscribe((count) => {
    document.body.innerText = String(count);
  });

posted on   aisowe  阅读(61)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示