· Özgür Vurgun · Angular · 2 min read

12. RxJS ve Angular’da Reaktif Programlama

12. RxJS ve Angular’da Reaktif Programlama

Reaktif programlama Nedir?

Şöyle düşün:

Bir şey değiştiğinde, başka bir şey otomatik değişsin istiyorum

Bu fikir temel olarak reaklam panosuna benzer. Panoya fiyatı asarsın, her yerde o fiyat görünür. Ama panoya yeni fiyatı yazdığında tüm afişler otomatik güncellenir.

Buna veri akışına tepki verme yani reaktif olma denir.

RxJS Nedir?

RxJS, “Reactive Extensions for JavaSript” anlamına gelir. Yani: “JavaScript’e reaktif yetenek ekleyelim” projesidir.

Angular, fromdan HTTP’ye router’dan event’lere kadar her şeyi Observable sistemiyle yönetir. Çünkü RxJS:

  • Akışlar oluşturmanı sağlar (data stream)
  • Akışa abone olmanı sağlar (observer)
  • Akışı dönüştürmeni sağlar (operatörler)
  • Memory leak riskini yönetmeni sağlar (unsubscribe)

Observable Nedir?

Observable, gelecekte bir veya daha fazla veri gönderebilen bir kaynaktır. Bir Promise, sadece bir defa veri döner. Ama Observable, sonsuz veri döndürebilir.

Analoji

  • Observable bir gazete bayisidir
  • Abone olursun (subscribe)
  • Her gün gazete gödnerir
  • Canın sıkılırsa aboneliği iptal edersin (unsubscribe)

Basit Observable

import { Observable } from 'rxjs';

const myStream = new Observable(observer => {
  observer.next('Merhaba');
  observer.next('Dünya');
  observer.complete();
});

myStream.subscribe(data => console.log(data));

Angular Neden RxJS kullanır?

Çünkü Angular her şeyin bir akışı olduğunu düşünür:

  • HTTP isteği: this.http.get(...) -> Observable
  • Router parametresi: this.route.params -> Observable
  • Form değişikliği: form.valueChanges -> Observable
  • Timer: interval(1000) -> Observable

Bu sayede sabit değil, sürekli değişebilen bir dünyayı kolayca yönetebilirsin.

ÖzellikPromiseObservable
Kaç kez veri verirBir kezSonsuz kez olabilir
Cancel edilebilir?HayırEvet
Operatör var mı?YokEvet
Lazy mi?EvetEvet
Chain yapısıthen()pipe()

Angular’da Günlük RxJS Kullanımı

HTTP

this.http.get('/api/users')
  .subscribe(data => this.users = data);

Router Param Takibi

this.route.params
  .subscribe(params => console.log(params['id']));

Form valueCHanges

this.form.valueChanges
  .subscribe(value => console.log(value));

Operatörler (map, filter, switchMap vs.)

RxJS’te veriyi işlememizi sağlayan yapı pipe() içinde kullanılan operatörlerdir.

En yaygınları:

OperatörNe yapar?
mapVeriyi dönüştürür
filterBelirli koşullara göre süzer
switchMapYeni observable başlatır, öncekini iptal eder
debounceTimeBelirli süre boyunca bekler
catchErrorHataları yakalar

Örnek:

this.searchControl.valueChanges.pipe(
  debounceTime(300),
  filter(value => value.length > 2),
  switchMap(query => this.api.search(query))
).subscribe(results => this.results = results);

Unutma Unsubscribe Gerekebilir

Observable’lar sonsuz olabilir. Eğer sen aboneliği iptal etmezsen memory leak oluşabilir.

Manuel Unsubscribe

subscription: Subscription;

ngOnInit() {
  this.subscription = this.form.valueChanges.subscribe(...);
}

ngOnDestroy() {
  this.subscription.unsubscribe();
}

Ya da takeUntil, async pipe, untilDestroyed gibi yöntemlerle otomatik kontol edebilirsin.

Sonuç: Kod Yazmak Değil, Akışla Yaşamak

RxJS ve reaktif programlama sana şunu öğretir:

Veriyi zorla alma, ona tepki ver

Angular’da veri sadece bir değişken değil, bir akıştır. Sen o akışı dönüştürür, filtreler, şekillendirir ve ona abone olursun.

Share:
Back to Blog

Related Posts

View All Posts »
14. Signals

14. Signals

Angular Signals - Yeni Nesil Reaktivite Neden Böyle Bir Yapıya İhtiyaç Duyuldu? Angular uzun yıllardır reaktif programlama ihtiyaçlarını karşılamak için RxJS kütüphanesini...

18. Monorepo Nedir?

18. Monorepo Nedir?

Ne Bu Monorepo? Projeyi yazıyorsun, her şey yolunda. Sonra ekip büyüyor. Frontend bir yerde, backend başka yerde, ortak UI bileşenleri başka bir repo’da… Bir noktada kendini şöyle...

16. Zoneless Nedir?

16. Zoneless Nedir?

Angular deyince akla genelde component’ler, service’ler falan gelir ama içerde bir mimari var ki, senin haberin bile olmadan bütün uygulamanın kaderini etkiliyor: Zone.js Bu...