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);
});
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架