Getters & create todo
[Début de la branche step-2]
Voici une petite explication de l'utilisation du Pipe async :
Le Pipe async souscrit à un Observable ou une Promise qui renvoie la dernière valeur qu'il a émise. Lorsqu'une nouvelle valeur est détectée, le canal asynchrone envoie un signale au component afin qu'il mette à jour la donnée.
Lorsque le component est détruit, le Pipe async se désinscrit automatiquement afin d'éviter les fuites de mémoire potentielles.
La syntaxe de la liste de todos :
<li *ngFor="let todo of (todos$ | async)?.data">Cependant, en changeant l'argument du select('todos') par une fonction, on peut obtenir une syntaxe plus simplifiée :
<li *ngFor="let todo of todos$ | async">this.todos$ = store.pipe(select((state) => state.todos.data)); // On cible directement la propriété dataLe Pipe et les opérateurs RXJS
Avant de continuer sur nos fonctions select, un point sur le Pipe RXJS s'impose.
Le Pipe permet de réaliser un chaînage d'opérateurs RXJS de manière plus lisible.
Exemple de Pipe :
const { Observable } = require('rxjs/Rx')
const { filter, map, reduce } = require('rxjs/operators')
const { Pipe } = require('rxjs/Rx')
const filterOutEvens = filter(x => x % 2)
const doubleBy = x => map(value => value \* x);
const sum = reduce((acc, next) => acc \+ next, 0);
const source$ = Observable.range(0, 10)
source$
.pipe(
filterOutEvens,
doubleBy(2),
sum
).subscribe(console.log); // 50Aperçu des différents opérateurs : http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html
Les States Selectors
La fonction select de NGRX peut prendre une fonction en paramètre. On peut donc déporter cette logique et la stocker dans un fichier dédié. Grâce à la fonction createSelector, on pourra composer des sélecteurs à partir d'autres sélecteurs.
store/selectors/todo-list.selector.ts
/app.component.ts
Créer une todo
Utiliser un formulaire pour créer une todo grâce au FormsBuilder d'Angular. La fonction createTodo renverra la future action de création dans le reducer.
/app.component.ts
Ne pas oublier de charger les modules pour utiliser les formulaires d'Angular.
/app.module.ts
Créer l'action pour le reducer :
store/actions/todo-list.action.ts
Cette action transmet un payload qui sera la nouvelle todo à ajouter à notre tableau :
/store/reducers/todo-list.reducer.ts
Notre action createTodo est terminée. Reste à revoir la gestion des ids.
Last updated
Was this helpful?