web-dev-qa-db-fra.com

Quelle est la différence entre Subject et BehaviorSubject?

Je ne comprends pas bien la différence entre un sujet et un sujet de comportement. Est-ce juste qu'un BehaviorSubject a la fonction getValue?

170
Mike Jerred

Un BehaviorSubject contient une valeur. Quand il est abonné, il émet la valeur immédiatement. Un sujet ne contient pas de valeur.

Exemple de sujet (avec l'API RxJS 5):

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

La 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 la valeur initiale: new Rx.BehaviorSubject (1)
  • Envisagez ReplaySubject si vous souhaitez que le sujet contienne plusieurs valeurs.
218
ZahiC

Comportement

BehaviourSubject renverra la valeur initiale ou la valeur actuelle de l'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

Subject

Le sujet ne renvoie pas la valeur actuelle sur l'abonnement. Il se déclenche uniquement sur .next(value) appeler et retourner/afficher la 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
195
Mohammed Safeer

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

enter image description here

20
piecioshka