[RxJS] Use filter and partition for conditional logic
// begin lesson code
import { fromEvent, partition } from 'rxjs';
import { filter, pluck } from 'rxjs/operators';
const MOVE_SPEED = 20;
let leftPosition = 0;
// elems
const box = document.getElementById('box');
// streams
const click$ = fromEvent(document, 'click');
const xPositionClick$ = click$.pipe(pluck('clientX'));
xPositionClick$.subscribe(xPos => {
/*
* Generally if you have a single if statement in
* you subscribe block, prefer filter instead.
*/
if(xPos < window.innerWidth / 2) {
box.style.left = `${leftPosition -= MOVE_SPEED}px`;
} else {
box.style.left = `${leftPosition += MOVE_SPEED}px`;
}
});
If you found youself doing if/else
it is possible to use partition
operator.
// begin lesson code
import { fromEvent, partition, merge } from 'rxjs';
import { filter, pluck, tap } from 'rxjs/operators';
const MOVE_SPEED = 20;
let leftPosition = 0;
// elems
const box = document.getElementById('box');
// streams
const click$ = fromEvent(document, 'click');
const xPositionClick$ = click$.pipe(pluck('clientX'));
const [ clickLeft$, clickRight$ ] = partition(
xPositionClick$,
xPos => xPos < window.innerWidth / 2
);
const moveLeft = () => {
box.style.left = `${leftPosition -= MOVE_SPEED}px`;
}
const moveRight = () => {
box.style.left = `${leftPosition += MOVE_SPEED}px`;
}
const moveLeft$ = clickLeft$.pipe(tap(moveLeft));
const moveRight$ = clickRight$.pipe(tap(moveRight));
merge(moveLeft$, moveRight$).subscribe()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2020-10-22 [React] Lazy loading module
2019-10-22 [Flutter] How to pass the state between two screen thought router
2018-10-22 [HTML5] Show Different Variations of Images Depending on the Viewport Width using Art Direction
2018-10-22 [HTML5] Show Images of Differing Resolutions Depending on the Viewport Width with srcset
2018-10-22 [NPM] Set default values for package.json using npm set
2018-10-22 [Javascript] Replicate JavaScript Constructor Inheritance with Simple Objects (OLOO)
2018-10-22 [React] Create and import React components with Markdown using MDXC