Avatar ·

ما الفرق بين Subject و BehaviorSubject في RxJS؟ أمثلة باستخدام TypeScript

مرحبًا بالجميع! بدأت في تعلم Angular و RxJS، وحدث لدي ارتباك بين Subject و BehaviorSubject. يبدو أن كلاهما يُستخدمان لإنشاء Observable مع إمكانية إرسال القيم، لكنني لا أفهم الفرق الرئيسي.

إليك مثال كتبته. عندما أستخدم Subject، فإن المشتركين الذين يشتركون بعد إرسال القيمة لا يحصلون على تلك القيمة:

import { Subject } from 'rxjs';

const subject = new Subject<number>();

subject.next(1); // نرسل القيمة قبل الاشتراك

subject.subscribe({
  next: (v) => console.log('مشترك Subject A:', v)
});

subject.next(2); // نرسل بعد الاشتراك
// النتيجة: مشترك Subject A: 2
// القيمة 1 ضاعت

وعندما أستخدم BehaviorSubject، فإن المشتركين الذين يشتركون لاحقًا يحصلون على آخر قيمة:

import { BehaviorSubject } from 'rxjs';

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