State Management Angular — Angular

Mengelola state di Angular bisa dengan Signals, Services, atau NgRx. Signal-based Store @Injectable({ providedIn: "root" }) export class CartStore { private…

Mengelola state di Angular bisa dengan Signals, Services, atau NgRx.

Signal-based Store

@Injectable({ providedIn: "root" })
export class CartStore {
  private items = signal<CartItem[]>([])

  readonly cartItems = this.items.asReadonly()
  readonly total = computed(() =>
    this.items().reduce((sum, item) => sum + item.price, 0)
  )

  addItem(item: CartItem) {
    this.items.update(items => [...items, item])
  }

  removeItem(id: number) {
    this.items.update(items => items.filter(i => i.id !== id))
  }
}

Di Komponen

export class CartComponent {
  private store = inject(CartStore)
  items = this.store.cartItems
  total = this.store.total
}

Signal-based store adalah pendekatan modern — lebih sederhana dari NgRx untuk kebanyakan kasus.

Kapan Pakai Apa?

Tidak ada satu jawaban benar — pilih sesuai skala state:

Skala Pilihan Kapan
Sangat lokal (1 komponen) Signal di komponen State yang tidak dipakai komponen lain. Cukup count = signal(0) di class.
Cross-komponen kecil Signal-based service (@Injectable) 2-5 komponen butuh share state. Pakai pola di atas (CartStore).
Async + complex flow Service + RxJS Banyak side effect, debouncing, race condition. Service return Observable.
Skala enterprise NgRx (Redux pattern) Banyak action, time-travel debugging, audit log, tim besar.

💡 Default mulai dengan Signals. Naikkan ke service+RxJS kalau butuh async lebih kompleks. Pakai NgRx hanya kalau benefit-nya jelas (audit, time travel) — jangan pakai karena "kelihatan profesional".

Yang akan kamu pelajari