[解決済み】AngularのSubjectとBehaviorSubjectとReplaySubjectの比較
質問
この3つを理解するために探していました。
私はそれらを使って、いつ、なぜ、どんなメリットがあるのかを知りたいのですが、ドキュメントを読んだり、チュートリアルを見たり、グーグルで検索したりしてみたものの、これといった意味を見出せずにいます。
では、その目的は何なのでしょうか?実際の事例があれば、コードでなくてもいいので教えてください。
単に "a+b => c you are subscribed to ..." といった説明ではなく、すっきりとした説明が欲しいです。
ありがとうございました。
解決方法は?
結局のところ、動作とセマンティックスの問題なのです。を使用すると
-
Subject
- サブスクライバーは、発行されたパブリッシュされた値のみを取得します。 後 サブスクリプションを作成します。自問自答してみてください、それはあなたが望むことですか?サブスクライバーは以前の値について何か知る必要がありますか?もしそうでなければ、これを使うことができますし、そうでなければ他のものを選んでください。例えば、コンポーネント間の通信の場合。例えば、ボタンをクリックすると、他のコンポーネントにイベントを発行するコンポーネントがあるとする。通信には、主語があるサービスを使うことができます。 -
BehaviorSubject
- の場合、最後の値がキャッシュされます。サブスクライバーは最初のサブスクリプションの際に最新の値を取得します。このサブジェクトのセマンティクスは、時間の経過とともに変化する値を表すことである。例えば、ログインしているユーザー。最初のユーザーは匿名ユーザーかもしれない。しかし、一旦ユーザーがログインすると、新しい値は認証されたユーザーの状態になります。は、その
BehaviorSubject
は初期値で初期化されます。これは、コーディングの好みに応じて重要な場合があります。例えば、これをnull
. それから、サブスクリプションで、NULLチェックを行う必要があります。多分OKか、それとも迷惑か。 -
ReplaySubject
- は、指定された排出数までキャッシュすることができます。サブスクライバーは、サブスクリプション時にキャッシュされたすべての値を取得します。この動作はいつ必要になるのでしょうか?正直なところ、次のようなケースを除いては、このような動作が必要になったことはありません。を初期化した場合
ReplaySubject
というバッファサイズを持つ1
であれば、実際に 動作 と同じようにBehaviorSubject
. 最後の値は常にキャッシュされるため、時間と共に値が変化するように動作します。これによってnull
のようにチェックします。BehaviorSubject
で初期化されたnull
. この例では、最初のパブリッシングまで、サブスクライバーに値が発行されることはありません。
つまり、(どちらを使うかは)あなたが期待する動作によるということです。ほとんどの場合、あなたはおそらく
BehaviorSubject
なぜなら、あなたが本当に表現したいのは、quot;value over time"というセマンティックなものだからです。しかし、私は個人的には
ReplaySubject
で初期化された
1
.
したいこと
避ける
は、バニラの
Subject
本当に必要なのはキャッシュの動作なのに。例えば、ルーティングガードやリゾルブを書いているとします。このガードでデータを取得し、それをサービスの
Subject
. そして、ルーティングされたコンポーネントでサービスサブジェクトを購読し、ガードで発行されたその値を取得しようとする。OOPs 値はどこだ?もう発行されてるんだよ、デュフフ。キャッシュ機能を使ってください。
こちらもご覧ください。
関連
-
vue3.0プロジェクトのアーキテクチャを構築するための便利なツール
-
[解決済み】Node.js getaddrinfo ENOTFOUND
-
[解決済み] angular-routeとangular-ui-routerの違いは何ですか?
-
[解決済み] Angular HTMLバインディング
-
[解決済み] Angular:*ngClassを使った条件付きクラス
-
[解決済み] BehaviorSubjectとObservableの違い?
-
[解決済み] Angular/RxJS `Subscription` からいつ退会すればいいのか?
-
[解決済み] Angularプロジェクトごとに生成される膨大な数のファイル
-
[解決済み] AngularJSの部分的なビューに基づいて動的にヘッダーを変更するには?
-
[解決済み] SubjectとBehaviorSubjectの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
JavaScriptのクロージャの説明
-
Vueでルートネスティングを実装する例
-
vueにおけるfilterの適用シーンについて解説します。
-
Vueのイベント処理とイベントモディファイアの解説
-
[解決済み】SyntaxError: JSONの位置1に予期しないトークンoがある。
-
[解決済み】Node.js getaddrinfo ENOTFOUND
-
[解決済み】ERROR エラーです。スイッチのname属性が指定されていないフォームコントロールの値アクセッサがない
-
[解決済み】ExpressJS - throw er Unhandled errorイベント
-
[解決済み】<select>で現在選択されている<option>をJavaScriptで取得するにはどうすればよいですか?
-
[解決済み] BehaviorSubjectとObservableの違い?