Cours Angular · Module 10: Gestion d'état

Le Store NgRx classique

2 min de lecture
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 interface

Actions

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. 1. Que représente une Action dans NgRx ?

  2. 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) :

Articles utiles