De Redux à NGRX

[ Début de la branche step-1 ]

Redux est un pattern déjà implémenté sur les principaux frameworks/librairies Javascript du moment. Pour React => react-redux Pour Vue => vuex Pour Angular => NGRX

Il est donc inutile de créer un store from scratch. Comme nous allons créer une application Angular, nous utiliserons NGRX. Cette librairie est une implémentation "reduxienne", qui englobe une couche de RXJS . Tout comme Angular, elle utilise les Observables pour communiquer la mise à jour des états dans les composants Angular.

Installation

Pour démarrer, il faut utiliser la version 5 d'Angular. Le CLI doit être au dessus de la version 1.6.0 et doit donc avoir RXJS en version 5.5.6 pour utliser les derniers opérateurs disponibles.

Commençons par créer un nouveau projet Angular :

$ ng new ngrx-tutoriel-app --style=scss

Dans le dossier, rajouter NGRX en version 5.0 et plus :

$ npm install @ngrx/store ou yarn add @ngrx/store

Architecture

Voici un exemple de schéma d'arborescence pour structurer nos dossiers :

app
│   app.component.ts
│   app.component.scss
│    app.component.html
│   app.module.ts  
└───store
│   │   index.ts
│   └───actions
│   │   │   exemple.action.ts
│   │   │   ...
│   └───reducers
│      │   │   exemple.reducer.ts
│   │   │   ...
└───modules

Commençons ! [ début du tutoriel ]

Pour changer de l'exemple du counter précédent, nous allons créer une todolist. Faisons le point de ce que représente fonctionnellement une todo : 1. Récupération des todos -> GET 2. Création des todos -> PUT 3. Suppression des todos-> DELETE 4. Mise à jour des todos -> PATCH / POST

Tout d'abord, commençons par définir l'interface :

models/todo.ts

Model utilisé par JsonPlaceholder.

Créer ici un fichier pour mocker nos valeurs :

mocks/todo-list.ts

Créer l'action pour initialiser notre liste :

store/actions/todo-list.action.ts

Il est préférable d'encapsuler le tout dans un namespace pour simplifier les imports. Le dernier export Actions servira pour le typage du reducer uniquement :

/store/reducers/todo-list.reducer.ts

store/index.ts

Dans le fichier index.ts, on définit l'objet reducers qui contient notre reducer de todos, puis on ajoute une fonction getReducers qui renvoie cet objet :

Le mode Ahead of Time (AoT) compilation de Angular exige que tous les symboles référencés dans les métadonnées du décorateur soient analysables statiquement. Pour cette raison, nous ne pouvons pas insérer l'état à l'exécution avec AOT sauf si nous utilisons notre reducers en tant que fonction.

Pour insérer les reducers dans votre application, utiliser une InjectionToken et un Providers pour enregistrer ceux-ci via l'insertion de dépendance.

/app.module.ts

Pour finaliser la création du Store, utiliser le StoreModule et insérer le token.

Ajouter notre state de todo dans le app.component.ts via la fonction select.

/app.component.ts

Vous devriez voir apparaître la liste des todos.

Last updated

Was this helpful?