0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

RxJS JavaScriptで clickイベント記述 比較

Last updated at Posted at 2022-07-17
<html>
    <head>
        <meta charset="UTF-8">
        <title>RxJs</title>
        <script src="https://unpkg.com/rxjs@^7/dist/bundles/rxjs.umd.min.js"></script>
    </head>
    <body>
        <button type="button">BUt</button>
    </body>
    <script>
        const {fromEvent} = rxjs;
        let count = 0;

        const button = document.querySelector('button');

        //javascript 書き方(即時関数で記述した)
        // button.addEventListener('click', (() =>{
        //     return (event) => console.log(`cont: ${++count}`)
        // })(0));

        //RxJS 書き方
        // fromEvent(button,'click').subscribe(
        //     (count)=> console.log(`count: ${++count}`)
        // );

    </script>
</html>

RxJSを使用するため、今回head部にCDNを読み込ませています。
fromEventを使用してbuttonのclickイベント処理を記述しています。
https://rxjs.dev/api/index/function/fromEvent

(count)=> console.log(`count: ${++count}`)の部分を、

(event)=> console.log(event.type)に書き換えるとconsoleでの出力結果は変わります。

event.typeというのは、fromEvent(button,'click').subscribe(の行で記載している、
'click'イベントのことです。

RxJSの書き方をレベルアップしてみる

上記のコードから、改善します 結果は、一番上のコードと同じです。pipe()が追加されました。
//省略
        const {fromEvent} = rxjs;
        const {scan} = rxjs.operators;
        //let count = 0;

        const button = document.querySelector('button');

        //RxJS 書き方
        fromEvent(button,'click')
        //subscribeで実行された結果pipeがバケツのように蓄積するイメージ。
        //
        .pipe(
            //アロー関数で記述。第一引数:どういう処理にするか記述、第二引数:初期値を入力
            scan((count) => ++count, 0)
        )
        .subscribe(
             (count)=> console.log(`count: ${count}`)
        );
//省略

補足

他にも便利なオペレータが沢山あります。 scan関数や、他にも様々な使用する関数がありますが それはrxjsではオペレータと呼ぶらしい。

例えば、throttleTimeとかもオペレータと呼びます。

        .pipe( //subscribeの前に処理を挟む際に、pipeを記載
            throttleTime(3000),//3秒たたないと、次の処理を送らない処理(いくらクリックしても3秒以内は処理を送らない。)
            scan((count)=> ++count, 0)//受け取る値をどうするかを関数で書く。
        )

以下のRxJS公式サイトで、色々見ると勉強なると思います。
https://rxjs.dev/guide/operators

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?