⊗jsrxPmWFRs 12 of 57 menu

Réducteurs dans Redux

Dans la leçon précédente, nous avons utilisé la fonction createSlice pour créer une tranche (slice) pour les produits products et un réducteur qui mettra à jour cette tranche, stockée dans le store. Je rappelle encore une fois que dans Redux, les données de l'état sont modifiées à l'aide de réducteurs.

Il faut se souvenir que des restrictions s'imposent aux réducteurs. Un réducteur met à jour l'état uniquement sur la base des valeurs reçues de l'état courant et de l'objet action, puis il décide comment modifier l'état et renvoie sa nouvelle valeur.

Nous savons que par défaut, les objets et les tableaux en JavaScript sont mutables. Nous savons également qu'il est interdit de modifier le state directement, dans ce cas, il faut travailler uniquement avec des copies. Cette règle doit être respectée par le réducteur également. Mais écrire cette logique manuellement peut être assez fastidieux et complexe, et c'est là que la fonction createSlice vient à la rescousse, elle qui utilise la bibliothèque Immer, transformant votre code 'mutable' en code 'immutable'. Ainsi, on peut 'pécher' et simplifier la vie uniquement lorsqu'on utilise les fonctions createSlice ou createReducer.

Parmi les restrictions du réducteur figurent également l'utilisation d'une logique asynchrone, le calcul de valeurs aléatoires et l'exécution d'autres "effets de bord". Et maintenant, après avoir fait plus ample connaissance avec le réducteur, revenons à notre application avec les produits.

Dans notre application, il y a un store que nous avons créé dans les leçons précédentes, mais pour l'instant il ne contient rien. Ouvrons notre fichier store.js et ajoutons-y un peu de code. Pour commencer, importons-y la fonction reducer pour les produits :

import productsReducer from '../parts/products/productsSlice'

Maintenant, en tant que réducteur, nous pouvons spécifier la fonction importée productsReducer :

export default configureStore({ reducer: { products: productsReducer } })

Par cette ligne ci-dessus, nous indiquons à notre store que désormais, lorsqu'une action se produit, toutes les données pour la tranche state.products seront mises à jour par le réducteur productsReducer.

Maintenant, vous pouvez lancer l'application (remarquez que l'avertissement concernant un réducteur non valide a disparu de la console !), ouvrir Redux DevTools dans le navigateur et explorer ses onglets. Par exemple, en cliquant sur l'onglet State dans l'onglet Inspector nous pouvons voir nos deux objets avec les produits, qui sont apparus comme valeur initiale de l'état au premier lancement de l'application. Dans l'onglet Log monitor, nous voyons quelles tranches contient l'état global - c'est la tranche products, incluant deux objets. Jetez également un œil à l'onglet Chart.

Ouvrez votre application avec les étudiants et modifiez le code du fichier store.js, comme montré dans la leçon.

Lancez votre application dans le navigateur et explorez les onglets de l'extension Redux DevTools.

byruuzplnl