RxJSとはなんぞや?
前回、RxJSが判らないという事が判りました。
初心と言うか、今までの(無様な)コードを忘れてRxJSについて考えてみたいと思います。
まずAngular公式のRXJSの説明を見ていきます。
Angular日本語ドキュメンテーション|RxJS ライブラリ
https://angular.jp/guide/rx-library#rxjs-%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA
中心にあるのはObservable と言う考え方のようですが要約すると(非同期の部分にあえて目をつぶります)
『RxJSは、observablesを使用したリアクティブプログラミング用のライブラリ』
となるかと思います。
思うに、目的として非同期処理があったにせよ、RxJS自体は何かを観測して、その結果により"アクション"を起こすための機能の集まり(ライブラリ)と言う気がしています。
ですので、非同期の処理の解決を中心に考えるからわかりづらいのかも?
そう考えてリアクティブプログラミングと言う言葉から検索を拡げて、考え方の参考になるサイトを見つけました。(オリジナルの翻訳のようですが)
【翻訳】あなたが求めていたリアクティブプログラミング入門
https://ninjinkun.hatenablog.com/entry/introrxja
私的にものすごく乱暴にまとめてみます。
・まず色々なイベントが起きる(あるいは起きた、起きるであろう)時間軸があり、これをストリームと呼ぶ
・イベントとは、ストリーム上の各瞬間で
①(何らかの型の)値が出力される
②エラ-が起きる
③完了する
のいずれかが起きた(あるいは起きる)ことを指す
・イベントが起きた時に実行される関数を準備しておけば結果的に非同期処理になるよね?
・また一つのストリームから別のストリームを作る事も出来る
(クリックに着目したストリームから、クリック回数のストリームが出来たり)
こういう考え方を『関数型リアクティブプログラミング (FRP)』と言うそうですが、応用できる方面と言うか、これに取り組むべき理由は一見の価値があると思うので引用します。
---------------------------------------------------------------
10年前、Webページのインタラクションと言えば、長いフォームをバックエンドに送って、フロントエンドはシンプルに描画するだけだった。アプリはよりリアルタイム性を持つように進化している。一つのフォームフィールドの変更は、自動的にバックエンドでの保存を引き起こす。コンテンツを "いいね" すると、リアルタイムで接続している他のユーザーに反映される。
現代のアプリは、高度にインタラクティブな体験ユーザーに与えるために、多数のリアルタイムイベントを扱っている。我々はこれを適切に取り扱うツールを探しており、リアクティブプログラミングがその答えなのだ。
---------------------------------------------------------------
そして、原著者によれば(どうやら)『全てがストリームにできる。これがFRPのマントラだ。』だそうで、これを信じるならば大抵の事はFRPすなわちRxJSで出来る・・・のかな?
と言うか、解決すべき課題をまずストリームとして見るのが最大にして最初のアプローチなんでしょうね。
あとは実践あるのみ・・・だといいなと思いつつ投稿です。