⊗jsrxPmRDDA 33 of 57 menu

Envío de action en una aplicación Redux

Ahora tenemos un reductor para actualizar el slice de reacciones. Actualmente necesitamos agregar el envío de una action que se active cuando el usuario haga clic en el botón de reacción. Pero antes, para que todo funcione completamente, necesitamos hacer un par de cambios.

Abramos nuestra aplicación de productos, y en ella el archivo productsSlice.js. Mire la definición de initialState. ¿Ve? En los objetos no hay una propiedad con reacciones. Arreglemos esto, estableciendo los contadores de cada reacción en 0:

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

En el segundo objeto de inicialización, agregue la propiedad reactions usted mismo. Esta propiedad también la necesitamos agregar más abajo en el código para el reductor productAdded, para que los nuevos productos también tengan esta funcionalidad. Hagamos esto para su método prepare:

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

Ahora procedamos a enviar la action. Abramos el archivo UserReactions.jsx, luego importemos en él el hook useDispatch y reactionClicked:

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

Al principio del código en el cuerpo de la función UserReactions en la primera línea (antes de const userReactions ... ) escribamos:

const dispatch = useDispatch()

Y asignemos al botón de reacción el envío de reactionClicked al hacer clic, además se pasará la id del producto y el nombre de la reacción en la que se hizo clic:

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

Ahora nos queda mostrar el componente de reacciones en el maquetado para nuestras páginas. Hagamos esto en el archivo ProductsList.jsx antes del elemento Link:

<UserReactions product={product} />

Y exactamente igual antes del elemento Link en la página del producto en el archivo ProductPage.jsx:

<UserReactions product={product} />

Ahora, cuando todo está en su lugar, podemos ejecutar nuestra aplicación. Probemos a hacer clic en los botones de reacciones. Podemos agregar un nuevo producto y también presionar ellos. Ahora, donde sea que hagamos clic en los botones de reacciones, los valores modificados se mostrarán para este producto en todas las páginas. Mire la página del producto individual (en la que hizo clic en las reacciones) y la página con su lista y viceversa, para todas las páginas el número de reacciones para un producto específico será el mismo.

Esta lección fue la final en el capítulo sobre el trabajo con datos en Redux. Trabajamos más en profundidad con los datos en el store de Redux y ahora sabemos cómo agregar la funcionalidad que necesitamos en la aplicación y usar los datos en los componentes de React.

Abra su aplicación de estudiantes. En el archivo studensSlice.js agregue a los objetos de inicialización la propiedad votes con los campos correspondientes. Haga esto también para el reductor studentAdded.

Dentro de la función UserVotes en el archivo UserVotes.jsx defina dispatch para el hook useDispatch y haga el envío de la action voteClicked al hacer clic en los botones de votación, pásele la id del estudiante y el nombre de vote, similar a como se muestra en la lección.

Muestre los botones para votar en el maquetado para los componentes StudentsList y StudentPage.

Español
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Usamos cookies para el funcionamiento del sitio, análisis y personalización. El procesamiento de datos se realiza de acuerdo con la Política de privacidad.
aceptar todas configurar rechazar