Avatar ·

Qual a diferença entre Subject e BehaviorSubject no RxJS? Exemplos em TypeScript

Olá a todos! Comecei a estudar Angular e RxJS, e fiquei confuso com Subject e BehaviorSubject. Ambos parecem ser usados para criar Observable com a capacidade de enviar valores, mas não entendo qual é a diferença chave.

Aqui está um exemplo que escrevi. Quando uso Subject, os subscribers que se inscrevem após o envio do valor não recebem esse valor:

import { Subject } from 'rxjs';

const subject = new Subject<number>();

subject.next(1); // Envia o valor antes da inscrição

subject.subscribe({
  next: (v) => console.log('Subject subscriber A:', v)
});

subject.next(2); // Envia após a inscrição
// Resultado: Subject subscriber A: 2
// Valor 1 perdido

E quando uso BehaviorSubject, os subscribers que se inscrevem mais tarde recebem o último valor:

import { BehaviorSubject } from 'rxjs';

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