352 votes

Quelle est la différence entre Subject et BehaviorSubject?

Je ne suis pas clair sur la différence entre un sujet et un BehaviorSubject. Est-ce juste qu'un BehaviorSubject a la fonction getValue?

448voto

ZahiC Points 3896

Un BehaviorSubject contient une valeur. Lorsqu'il est activé, il émet de la valeur immédiatement. Un Objet ne tient pas une valeur.

Sujet exemple (avec RxJS 5 de l'API):

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

Sortie de la Console sera vide

BehaviorSubject exemple:

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

Sortie de la Console: 1

En outre:

  • BehaviorSubject peut être créé avec une valeur initiale: nouvelle Rx.BehaviorSubject(1)
  • Envisager ReplaySubject si vous voulez l'objet de détenir plus d'une valeur

309voto

Mohammed Safeer Points 1533

BehaviourSubject

BehaviourSubject sera de retour à la valeur initiale ou de la valeur actuelle sur Abonnement

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);

Avec sortie:

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

Sujet

L'objet n'est pas de retour la valeur actuelle sur Abonnement. Il ne se déclenche que sur .next(value) appel et retour/sortie de l' value

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);

Avec la sortie suivante sur la console:

observerA: 2
observerB: 2
observerA: 3
observerB: 3

118voto

piecioshka Points 699

Je viens de créer un projet qui explique quelle est la différence entre tous les sujets :
https://github.com/piecioshka/rxjs-subject-vs-behavior-vs-replay-vs-async

entrez la description de l'image ici

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X