Kurs Angular · Moduł 10: Zarządzanie stanem
Kiedy używać State Management?
W tej lekcji4
Bez biblioteki (Signals/Services)
Używaj gdy:
- Mały/średni projekt
- Stan głównie lokalny w komponentach
- Proste współdzielenie między kilkoma komponentami
- Zespół nowy w Angular
// Prosty service ze Signals
@Injectable({ providedIn: 'root' })
export class CartService {
private items = signal<CartItem[]>([]);
readonly cartItems = this.items.asReadonly();
readonly total = computed(() =>
this.items().reduce((sum, item) => sum + item.price, 0)
);
addItem(item: CartItem): void {
this.items.update(items => [...items, item]);
}
}NgRx SignalStore
Używaj gdy:
- Średni projekt z rosnącą złożonością
- Chcesz korzystać z Signals
- Potrzebujesz struktury, ale nie pełnego Reduxa
- Preferujesz funkcyjne podejście
Klasyczny NgRx
Używaj gdy:
- Duży, złożony projekt
- Wiele źródeł danych i efektów ubocznych
- Potrzebujesz DevTools do debugowania
- Zespół doświadczony z Redux/NgRx
Podsumowanie
| Rozwiązanie | Złożoność | Boilerplate | DevTools | Signals |
|---|---|---|---|---|
| Services + Signals | Niska | Minimal | Nie | Tak |
| SignalStore | Średnia | Mały | Tak | Tak |
| NgRx Store | Wysoka | Duży | Tak | Nie* |
*NgRx ma selectSignal() do integracji
// NgRx z Signals
@Component({...})
export class MyComponent {
private store = inject(Store);
// Observable → Signal
samurai = this.store.selectSignal(selectAllSamurai);
loading = this.store.selectSignal(selectLoading);
}Hasła z dokumentacji w tej lekcji
Widzisz błąd w tej lekcji?
Sprawdź się
Odpowiedz na pytania z tej lekcji. Wybierz odpowiedź, a od razu zobaczysz, czy jest poprawna.
1. Które rozwiązanie state management jest zalecane dla małego projektu z głównie lokalnym stanem?
2. Do czego służy metoda store.selectSignal(selektor) w klasycznym NgRx?
To 2 z 4 pytań do tej lekcji. Pozostałe rozwiążesz w grze.
Zadania praktyczne w grze
- Układanie w pionie
Uporządkuj rozwiązania state management od najmniejszej do największej złożoności i boilerplate:
- Klikanie w kolejności
Kliknij elementy w kolejności, aby zbudować przypisanie zamieniające selektor NgRx na Signal w komponencie: