BehaviorSubject
RxJS のデザイン パターンを調べていますが、との違いがわかりませんObservable
。
私の理解では、BehaviorSubject には変更される可能性のある値を含めることができます。これはサブスクライブすることができ、サブスクライバーは更新された値を受け取ることができます。どちらもまったく同じ目的を持っているようです。
- Observable と BehaviorSubject はいつ使用すべきでしょうか、またその逆はどうでしょうか?
- Observable ではなく BehaviorSubject を使用する利点は何ですか、またその逆の利点は何ですか?
ベストアンサー1
BehaviorSubject
は のバリアントであり、他の Observable と同様に「サブスクライブ」できる のSubject
タイプです。Observable
行動の特徴
- メソッドを受け取っていなくても、サブスクリプション時に常に値を返す必要があるため、初期値が必要です。
next()
- サブスクリプション時に、Subjectの最後の値を返します。通常のObservableは、メソッドを受け取ったときにのみトリガーされます。
onNext()
- いつでも、メソッドを使用して非Observable内のSubjectの最後の値を取得できます。
getValue()
対象の特徴
- サブジェクトはObservableであるだけでなく「オブザーバー」でもあるため、サブジェクトにサブスクライブしながら値を送信することもできます。
- BehaviorSubjectから値を取得するには、次のメソッドを使用します。
asObservable()
BehaviorSubject を使用した例 1
// BehaviorSubject.
// 'A' is an initial value. If there is a Subscription
// after it, it would immediately get the value 'A'.
beSubject = new BehaviorSubject('a');
beSubject.next('b');
beSubject.subscribe(value => {
console.log('Subscription received the value ', value);
// Subscription received B. It would not happen
// for an Observable or Subject by default.
});
beSubject.next('c');
// Subscription received C.
beSubject.next('d');
// Subscription received D.
主題を使用した例2
// Subject.
subject = new Subject();
subject.next('b');
subject.subscribe(value => {
console.log('Subscription received the value ', value);
// Subscription won't receive anything at this point.
});
subject.next('c');
// Subscription received C.
subject.next('d');
// Subscription received D.
Observable はSubject
との両方から作成できますBehaviorSubject
。たとえば、 ですsubjectName.asObservable()
。
唯一の違いは、 メソッドを使用して Observable に値を送信できないことですnext()
。
BehaviorSubject
Angular では、コンポーネントの前にサービスが初期化されることが多いため、データ転送には を使用することをお勧めします。
BehaviorSubject は、コンポーネントがサービスにサブスクライブされているため、新しい更新がない場合でも、サービスを利用するコンポーネントが最後に更新されたデータを受け取ることを保証します。