⊗jsrxPmRDDA 33 of 57 menu

Envoi d'actions dans une application Redux

Nous avons maintenant un réducteur pour mettre à jour la tranche (slice) des réactions. Nous devons maintenant ajouter l'envoi d'une action qui se déclenchera lorsqu'un utilisateur clique sur un bouton de réaction. Mais d'abord, pour que tout fonctionne correctement, nous devons apporter quelques modifications.

Ouvrons notre application de produits, et dans celle-ci, le fichier productsSlice.js. Regardez la définition de initialState. Vous voyez ? Dans les objets, il n'y a pas de propriété pour les réactions. Corrigeons cela en définissant les compteurs de chaque réaction sur 0 :

{ id: '1', title: 'Product1', desc: 'This is an amazing product', price: '300', amount: '30', reactions: { good: 0, soso: 0, bad: 0, }, },

Ajoutez vous-même la propriété reactions dans le deuxième objet d'initialisation. Nous devons également ajouter cette propriété plus bas dans le code pour le réducteur productAdded, afin que les nouveaux produits aient aussi cette fonctionnalité. Faisons cela pour sa méthode prepare :

prepare(title, desc, price, amount, sellerId) { return { payload: { id: nanoid(), title, desc, price, amount, seller: sellerId, reactions: { good: 0, soso: 0, bad: 0, }, }, } },

Passons maintenant à l'envoi de l'action. Ouvrons le fichier UserReactions.jsx, puis importons le hook useDispatch et reactionClicked :

import { useDispatch } from 'react-redux' import { reactionClicked } from './productsSlice'

Au début du code, dans le corps de la fonction UserReactions, première ligne (avant const userReactions ... ), écrivons :

const dispatch = useDispatch()

Et attachons au bouton de réaction l'envoi de reactionClicked lors du clic, en transmettant l'id du produit et le nom de la réaction sur laquelle on a cliqué :

<button key={name} type="button" className="reaction-button" onClick={() => dispatch(reactionClicked({ productId: product.id, reaction: name })) } > {image} {product.reactions[name]} </button>

Il ne nous reste plus qu'à afficher le composant des réactions dans le rendu de nos pages. Faisons cela dans le fichier ProductsList.jsx avant l'élément Link :

<UserReactions product={product} />

Et de même, avant l'élément Link sur la page du produit dans le fichier ProductPage.jsx :

<UserReactions product={product} />

Maintenant que tout est en place, nous pouvons lancer notre application. Essayons de cliquer sur les boutons de réactions. Nous pouvons ajouter un nouveau produit et également cliquer sur eux. Maintenant, où que nous cliquions sur les boutons de réactions, les valeurs modifiées s'afficheront pour ce produit sur toutes les pages. Regardez la page d'un produit spécifique (sur laquelle vous avez cliqué sur les réactions) et la page de leur liste et vice versa, pour toutes les pages, le nombre de réactions pour un produit donné sera identique.

Cette leçon était la dernière du chapitre sur le travail avec les données dans Redux. Nous avons travaillé plus en profondeur avec les données dans le store Redux et nous savons maintenant comment ajouter les fonctionnalités nécessaires dans l'application et utiliser les données dans les composants React.

Ouvrez votre application avec les étudiants. Dans le fichier studensSlice.js, ajoutez aux objets d'initialisation la propriété votes avec les champs correspondants. Faites cela également pour le réducteur studentAdded.

À l'intérieur de la fonction UserVotes dans le fichier UserVotes.jsx, déclarez dispatch pour le hook useDispatch et effectuez l'envoi de l'action voteClicked lors d'un clic sur les boutons de vote, transmettez-lui l'id de l'étudiant et le nom du vote, comme montré dans la leçon.

Affichez les boutons de vote dans le rendu des composants StudentsList et StudentPage.

Français
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Nous utilisons des cookies pour le fonctionnement du site, l'analyse et la personnalisation. Le traitement des données est effectué conformément à la Politique de confidentialité.
accepter tout personnaliser refuser