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é data

Le 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); // 50

Aperç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?