Cours Angular · Module 10: Gestion d'état
Le Store NgRx classique
Dans cette leçon3
NgRx Store, c'est le pattern Redux pour Angular : puissant, mais plus complexe.
Structure NgRx
1store/
2├── samurai.actions.ts # Actions
3├── samurai.reducer.ts # Reducer
4├── samurai.selectors.ts # Selectors
5├── samurai.effects.ts # Effects (side effects)
6└── samurai.state.ts # State interfaceActions
1import { createAction, props } from '@ngrx/store';
2
3// Chargement
4export const loadSamurai = createAction('[Samurai] Load');
5export const loadSamuraiSuccess = createAction(
6 '[Samurai] Load Success',
7 props<{ samurai: Samurai[] }>()
8);
9export const loadSamuraiFailure = createAction(
10 '[Samurai] Load Failure',
11 props<{ error: string }>()
12);
13
14// CRUD
15export const addSamurai = createAction(
16 '[Samurai] Add',
17 props<{ samurai: Samurai }>()
18);
19
20export const deleteSamurai = createAction(
21 '[Samurai] Delete',
22 props<{ id: number }>()
23);Reducer
1import { createReducer, on } from '@ngrx/store';
2
3export interface SamuraiState {
4 samurai: Samurai[];
5 loading: boolean;
6 error: string | null;
7}
8
9const initialState: SamuraiState = {
10 samurai: [],
11 loading: false,
12 error: null
13};
14
15export const samuraiReducer = createReducer(
16 initialState,
17
18 on(loadSamurai, (state) => ({
19 ...state,
20 loading: true,
21 error: null
22 })),
23
24 on(loadSamuraiSuccess, (state, { samurai }) => ({
25 ...state,
26 samurai,
27 loading: false
28 })),
29
30 on(loadSamuraiFailure, (state, { error }) => ({
31 ...state,
32 loading: false,
33 error
34 })),
35
36 on(addSamurai, (state, { samurai }) => ({
37 ...state,
38 samurai: [...state.samurai, samurai]
39 })),
40
41 on(deleteSamurai, (state, { id }) => ({
42 ...state,
43 samurai: state.samurai.filter(s => s.id !== id)
44 }))
45);Tu as repéré une erreur dans cette leçon ?
Teste tes connaissances
Réponds aux questions de cette leçon. Choisis une réponse pour voir tout de suite si elle est correcte.
1. Que représente une Action dans NgRx ?
2. Que fait un Reducer dans NgRx quand il reçoit une action ?
Voici 2 des 3 questions de cette leçon. Réponds aux autres dans le jeu.
Tâches pratiques dans le jeu
- Éditeur de code
Complète les actions et le reducer pour gérer les samouraïs dans NgRx.
- Tri horizontal
Ordonne l'appel createAction avec le type de l'action et les props (une seule ligne, de gauche à droite) :
- Tri vertical
Ordonne les actions décrivant le flux de chargement de données dans NgRx (du début à la fin) :
- Tri vertical
Ordonne le flux à sens unique dans le NgRx classique (de l'événement jusqu'à la vue) :