Apa perbedaan antara Subjek dan BehaviorSubject?

I'm tidak jelas pada perbedaan antara Subjek dan BehaviorSubject. Itu hanya bahwa BehaviorSubject memiliki getValue fungsi?

Larutan

Sebuah BehaviorSubject memegang satu nilai. Ketika itu berlangganan memancarkan nilai segera. Subjek doesn't memegang nilai.

Subjek contoh (dengan RxJS 5 API):

const subject = new Rx.Subject();
subject.next(1);
subject.subscribe(x => console.log(x));

Konsol output akan kosong

BehaviorSubject contoh:

const subject = new Rx.BehaviorSubject();
subject.next(1);
subject.subscribe(x => console.log(x));

Konsol output: 1

Selain itu:

  • BehaviorSubject dapat dibuat dengan nilai awal: baru Rx.BehaviorSubject(1)
  • Pertimbangkan ReplaySubject jika anda ingin subjek untuk menyimpan lebih dari satu nilai
Komentar (3)

BehaviourSubject

BehaviourSubject akan mengembalikan nilai awal atau nilai saat ini pada Langganan

var subject = new Rx.BehaviorSubject(0);  // 0 is the initial value

subject.subscribe({
  next: (v) => console.log('observerA: ' + v)  // output initial value, then new values on `next` triggers
});

subject.next(1);  // output new value 1 for 'observer A'
subject.next(2);  // output new value 2 for 'observer A', current value 2 for 'Observer B' on subscription

subject.subscribe({
  next: (v) => console.log('observerB: ' + v)  // output current value 2, then new values on `next` triggers
});

subject.next(3);

Dengan output:

observerA: 0
observerA: 1
observerA: 2
observerB: 2
observerA: 3
observerB: 3

Subjek

Subjek tidak mengembalikan nilai saat ini pada Langganan. Itu hanya memicu on .berikutnya(nilai) call dan return/output nilai

var subject = new Rx.Subject();

subject.next(1); //Subjects will not output this value

subject.subscribe({
  next: (v) => console.log('observerA: ' + v)
});
subject.subscribe({
  next: (v) => console.log('observerB: ' + v)
});

subject.next(2);
subject.next(3);

Dengan output sebagai berikut pada console:

observerA: 2
observerB: 2
observerA: 3
observerB: 3
Komentar (6)

Aku hanya menciptakan sebuah proyek yang menjelaskan apa perbedaan antara semua mata pelajaran:
https://github.com/piecioshka/rxjs-subject-vs-behavior-vs-replay-vs-async

Komentar (0)