[解決済み] BehaviorSubjectとObservableの違い?
質問
Angular RxJsのパターンを調べているのですが、「Angular RxJs」と「Angular RxJs」の違いが分かりません。
BehaviorSubject
と
Observable
.
私の理解では
BehaviorSubject
は、時間の経過とともに変化することができる値です (購読することができ、購読者は更新された結果を受け取ることができます)。これは、まさに
Observable
.
を使うのはどんなときか?
Observable
とは異なり
BehaviorSubject
? を使用する利点はありますか?
BehaviorSubject
よりも
Observable
またはその逆は?
どのように解決するのですか?
動作対象 はサブジェクトの一種です。サブジェクトは特別なタイプの観測物なので、他の観測物と同じようにメッセージを購読することができます。BehaviorSubjectのユニークな特徴は以下の通りです。
-
を受信していなくても、購読時には常に値を返す必要があるため、初期値が必要です。
next()
-
サブスクリプション時に、サブジェクトの最後の値を返します。通常のオブザーバブルは
onnext
-
を使用すると、任意の時点で、非オブザーバブルコード内のサブジェクトの最後の値を取得することができます。
getValue()
メソッドを使用します。
観察可能なものと比較した場合の被写体のユニークな特徴とは
- observableであることに加えてobserverでもあるので、subscribeするだけでなく、subjectに値を送ることもできる。
また、ビヘイビアサブジェクトからobservableを取得するためには
asObservable()
メソッドで
BehaviorSubject
.
オブザーバブル
はジェネリックであり
BehaviorSubject
は技術的にはObservableのサブタイプである。なぜならBehaviorSubjectは特定の品質を持つobservableだからである。
を使った例 ビヘイビアサブジェクト :
// Behavior Subject
// a is an initial value. if there is a subscription
// after this, it would get "a" value immediately
let bSubject = new BehaviorSubject("a");
bSubject.next("b");
bSubject.subscribe(value => {
console.log("Subscription got", value); // Subscription got b,
// ^ This would not happen
// for a generic observable
// or generic subject by default
});
bSubject.next("c"); // Subscription got c
bSubject.next("d"); // Subscription got d
通常の主語を使った例2。
// Regular Subject
let subject = new Subject();
subject.next("b");
subject.subscribe(value => {
console.log("Subscription got", value); // Subscription wont get
// anything at this point
});
subject.next("c"); // Subscription got c
subject.next("d"); // Subscription got d
observableは
Subject
と
BehaviorSubject
を使って
subject.asObservable()
.
唯一の違いは、observableに値を送るのに
next()
メソッドを使用します。
Angularサービスでは、私は
BehaviorSubject
というのも、アンギュラサービスはコンポーネントやビヘイビアサブジェクトよりも先に初期化されることが多く、サービスを消費するコンポーネントが、たとえそのコンポーネントがこのデータを購読してから新しい更新がなくても、最終更新データを受け取ることを保証してくれるからです。
関連
-
vueネットワークリクエストソリューション ネイティブネットワークリクエストとjsネットワークリクエストライブラリ
-
jsを使った簡単な照明スイッチのコード
-
vueの補間表現とv-textディレクティブの違いについて
-
Vueでルートネスティングを実装する例
-
Vueの「データを聴く」原則を解説
-
[解決済み】React Nativeアプリをターミナルから実行するとエラーが発生する(iOS)
-
[解決済み】 env: node: macにそのようなファイルやディレクトリはありません
-
OSSアップロードエラーを解決する: net::ERR_SSL_PROTOCOL_ERROR
-
[解決済み] SubjectとBehaviorSubjectの違いは何ですか?
-
[解決済み】AngularのSubjectとBehaviorSubjectとReplaySubjectの比較
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
Vueはランニングライト形式のテキストを水平方向にスクロールする機能を実装している
-
vue3.0プロジェクトのアーキテクチャを構築するための便利なツール
-
vueはopenlayersを使用してスカイマップとガオードマップをロードする
-
[解決済み】Uncaught SyntaxError: JSONの位置0に予期しないトークンuがあります。
-
[解決済み】React Nativeアプリをターミナルから実行するとエラーが発生する(iOS)
-
[解決済み】 env: node: macにそのようなファイルやディレクトリはありません
-
[解決済み】 Uncaught TypeError : undefined のプロパティ 'replace' を読み取れない In Grid
-
モジュールのビルドに失敗しました。Error: ENOENT: no such file or directory, scandir 'D:\.... \node_modules
-
OSSアップロードエラーを解決する: net::ERR_SSL_PROTOCOL_ERROR
-
[解決済み】AngularのSubjectとBehaviorSubjectとReplaySubjectの比較