RxJS مخفف Reactive Extensions for JavaScript هست و یک کتابخونه (library) برای کار با داده‌های asynchronous و event-based به صورت Reactive Programming هست.

به زبان ساده:

  • هرجایی که با داده‌هایی که در طول زمان تغییر می‌کنند (مثل event، AJAX، WebSocket، interval، user input و…) سروکار داری، RxJS می‌تونه کمک بزرگی باشه.
  • به جای استفاده از callback یا promise، از Stream (جریان داده) و Observable استفاده می‌کنی و با یک سری عملگر (Operators) اونها رو مدیریت می‌کنی.

در چه فریمورک‌هایی میشه استفاده کرد؟

  • Angular (به طور پیش‌فرض استفاده میشه، مخصوصاً برای HTTP، فرم‌ها و eventها)
  • React (مخصوصاً با پروژه‌هایی که state management reactive نیاز دارند مثل redux-observable)
  • Vue.js (با کمک افزونه‌هایی مثل vue-rx)
  • Node.js (برای مدیریت streamها و eventها)
  • و حتی در پروژه‌های plain JS یا هرجایی که جاوااسکریپت داری، قابل استفاده است.

یک مثال ساده

مثال ۱: استفاده ساده در جاوااسکریپت

import { Observable } from 'rxjs';

const myObservable = new Observable(subscriber => {
  subscriber.next('سلام!');
  setTimeout(() => {
    subscriber.next('یک ثانیه بعد...');
    subscriber.complete();
  }, 1000);
});

myObservable.subscribe({
  next(x) { console.log(x); },
  complete() { console.log('پایان!'); }
});

خروجی کنسول:

سلام!
یک ثانیه بعد...
پایان!

مثال ۲: استفاده در Angular برای درخواست HTTP

// Angular Service
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';

@Injectable({ providedIn: 'root' })
export class UserService {
  constructor(private http: HttpClient) {}

  getUsers() {
    return this.http.get('/api/users'); // این یک Observable برمی‌گردونه
  }
}

// Angular Component
@Component({ /* ... */ })
export class UserListComponent implements OnInit {
  users$ = this.userService.getUsers();

  constructor(private userService: UserService) {}

  ngOnInit() {
    this.users$.subscribe(users => {
      console.log(users);
    });
  }
}

مثال ۳: استفاده در React با rxjs

import { fromEvent } from 'rxjs';

useEffect(() => {
  const click$ = fromEvent(document, 'click');
  const subscription = click$.subscribe(() => {
    console.log('کلیک شد!');
  });

  return () => subscription.unsubscribe();
}, []);

جمع‌بندی خیلی سریع

  • RxJS ابزاری برای کار با داده‌های غیرهمزمان و رویدادمحور به صورت خیلی قدرتمند و قابل ترکیب هست.
  • توی Angular اجباریه، توی React و Vue هم می‌تونه خیلی کمک کنه.
  • برای هرکاری که با event یا stream سروکار داری، می‌تونی ازش استفاده کنی.