スポンサーリンク

rxjsのSubjectとBehaviorSubjectの違い(Angular)

SubjectとBehaviorSubjectの違い

違いは、BehaviorSubjectの方が、初期値もしくは、現在の値を保持していること。

具体例

まずはSubjectのサンプルコードになります。

    const subject = new Subject<number>();

    // この場合だと、コンソールログには、1, 2と表示される
    subject.subscribe((value) => console.log(value));
    
    subject.next(1);
    subject.next(2);

behaivorSubjectの場合、インスタンス化する際に、以下のように初期値を設定することができます。
behaivorSubjectでは、subscribeで、即座に初期値、もしくは現在の供給されている最新値で、処理を実行します。

    const behaviorSubject = new BehaviorSubject<number>(0);

    // コンソールログには、0, 1, 2と表示される。
    behaviorSubject.subscribe((value) => console.log(value))

    behaviorSubject.next(1);
    behaviorSubject.next(2);

既にnextメソッドで供給している場合の例は以下です。

    const behaviorSubject = new BehaviorSubject<number>(0);
    behaviorSubject.next(1);
    behaviorSubject.next(2);
    // コンソールログには、2と表示される。
    behaviorSubject.subscribe((value) => console.log(value))

現在供給されている値で即座に、subscribeの処理を実行したい場合には、BehaviorSubjectを使うのがよい。