Kurs Angular · Moduł 10: Zarządzanie stanem
Klasyczny NgRx Store
W tej lekcji3
NgRx Store to wzorzec Redux dla Angular - potężny, ale bardziej złożony.
Struktura NgRx
store/
├── samurai.actions.ts # Akcje
├── samurai.reducer.ts # Reducer
├── samurai.selectors.ts # Selektory
├── samurai.effects.ts # Efekty (side effects)
└── samurai.state.ts # Interfejs stanuActions
import { createAction, props } from '@ngrx/store';
// Ładowanie
export const loadSamurai = createAction('[Samurai] Load');
export const loadSamuraiSuccess = createAction(
'[Samurai] Load Success',
props<{ samurai: Samurai[] }>()
);
export const loadSamuraiFailure = createAction(
'[Samurai] Load Failure',
props<{ error: string }>()
);
// CRUD
export const addSamurai = createAction(
'[Samurai] Add',
props<{ samurai: Samurai }>()
);
export const deleteSamurai = createAction(
'[Samurai] Delete',
props<{ id: number }>()
);Reducer
import { createReducer, on } from '@ngrx/store';
export interface SamuraiState {
samurai: Samurai[];
loading: boolean;
error: string | null;
}
const initialState: SamuraiState = {
samurai: [],
loading: false,
error: null
};
export const samuraiReducer = createReducer(
initialState,
on(loadSamurai, (state) => ({
...state,
loading: true,
error: null
})),
on(loadSamuraiSuccess, (state, { samurai }) => ({
...state,
samurai,
loading: false
})),
on(loadSamuraiFailure, (state, { error }) => ({
...state,
loading: false,
error
})),
on(addSamurai, (state, { samurai }) => ({
...state,
samurai: [...state.samurai, samurai]
})),
on(deleteSamurai, (state, { id }) => ({
...state,
samurai: state.samurai.filter(s => s.id !== id)
}))
);Widzisz błąd w tej lekcji?
Sprawdź się
Odpowiedz na pytania z tej lekcji. Wybierz odpowiedź, a od razu zobaczysz, czy jest poprawna.
1. Co reprezentuje Action w NgRx?
2. Co robi Reducer w NgRx, gdy otrzyma akcję?
To 2 z 3 pytań do tej lekcji. Pozostałe rozwiążesz w grze.
Zadania praktyczne w grze
- Edytor kodu
Uzupełnij akcje i reducer dla zarządzania samurajami w NgRx.
- Układanie w poziomie
Ułóż wywołanie createAction z typem akcji i props (jedna linia, od lewej do prawej):
- Układanie w pionie
Uporządkuj akcje opisujące przebieg ładowania danych w NgRx (od rozpoczęcia do zakończenia):
- Układanie w pionie
Uporządkuj przepływ jednokierunkowy w klasycznym NgRx (od zdarzenia do widoku):