[RxJS] Basic DOM Rendering with Subscribe

Posted Answer1215

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[RxJS] Basic DOM Rendering with Subscribe相关的知识,希望对你有一定的参考价值。

While frameworks like Angular 2 and CycleJS provides great ways to update the DOM and handle subscriptions for you, this lesson shows how you can still do basic subscribe blocks and manually update the DOM on your own.

 

const Observable = Rx.Observable;

const startButton = document.querySelector(#start);
const halfButton = document.querySelector(#half);
const quarterButton = document.querySelector(#quarter);

const stopButton = document.querySelector(#stop);
const resetButton = document.querySelector(#reset);

const input = document.querySelector(#input);

const start$ = Observable.fromEvent(startButton, click);
const half$ = Observable.fromEvent(halfButton, click);
const quarter$ = Observable.fromEvent(quarterButton, click);

const stop$ = Observable.fromEvent(stopButton, click);
const reset$ = Observable.fromEvent(resetButton, click);

const input$ = Observable.fromEvent(input, input)
    .map(event => event.target.value);


const data = {count:0};
const inc = (acc)=> ({count: acc.count + 1});
const reset = (acc)=> data;

const starters$ = Observable.merge(
    start$.mapTo(1000),
    half$.mapTo(500),
    quarter$.mapTo(250)
);

const intervalActions = (time)=> Observable.merge(
    Observable.interval(time)
        .takeUntil(stop$).mapTo(inc),
    reset$.mapTo(reset)
);

const timer$ = starters$
    .switchMap(intervalActions)
    .startWith(data)
    .scan((acc, curr)=> curr(acc))


timer$
    .do((x)=> console.log(x))
    .takeWhile((data)=> data.count <= 3)

    .withLatestFrom(
        input$.do((x)=> console.log(x)),
        (timer, input)=> ({count: timer.count, text: input})
    )
    .filter((data)=> data.count === parseInt(data.text))
    .reduce((acc, curr)=> acc + 1, 0)
    .repeat()
    .subscribe(
        (x)=> document.querySelector(#score).innerhtml = `
            ${x}
        `,
        err=> console.log(err),
        ()=> console.log(complete)
    );

 

以上是关于[RxJS] Basic DOM Rendering with Subscribe的主要内容,如果未能解决你的问题,请参考以下文章

javascript_basic_04

javascript_basic_01

DOM操作表格及样式4

DOM元素的尺寸和位置scrollTop等

react-router-dom 实现左侧导航

如何理解 RxJS?RxJS的中文API和使用教程