Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

242
Vistas
La interfaz de usuario de ReactJS no actualiza el estado

Estoy tratando de hacer una aplicación de comercio electrónico simple. Cuando un usuario va a la sección del carrito e intenta aumentar o disminuir la cantidad, cambia el estado pero permanece igual en la página. Necesito volver e ir al carrito nuevamente para actualizar. ¿Cómo puede cambiar dinámicamente?

 function CardItem() { const {cart, setCart} = useContext(ProductContext) const addQuantity = (cartItem) => { return cart.map((item) => ( cartItem.id === item.id ? item.quantity = item.quantity + 1 : item )) } const removeQuantity = (cartItem) => { cart.map((item) => ( cartItem.id === item.id ? item.quantity = item.quantity - 1 : item )) } return ( { cart.map((cartItem) => ( <tr key={cartItem.id}> <td class="quantity__item"> <div class="quantity"> <div class="pro-qty-2 d-flex align-items-center justify-content-center text-center"> <button className='increase' onClick={() => removeQuantity(cartItem)}> -</button> {cartItem.quantity} <button className='increase' onClick={() => addQuantity(cartItem)}>+</button> </div> </div> </td> </tr> )) })}
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Tema

  • El código en su fragmento no llama a setCart para actualizar ningún estado.
  • Los controladores de cantidad de agregar/eliminar simplemente están mutando el objeto de estado del cart . No mutes el estado de reacción.

Solución

Use la función de actualización de estado setCart para poner en cola una actualización de estado para activar una nueva representación para ver el estado actualizado. Use una actualización de estado funcional para actualizar correctamente desde el estado anterior y recuerde que debe copiar superficialmente cualquier estado que se esté actualizando.

Ejemplo:

 function CardItem() { const { cart, setCart } = useContext(ProductContext); const addQuantity = (cartItem) => { setCart(cart => cart.map(item => cartItem.id === item.id ? { // <-- new item object reference ...item, // <-- shallow copy item quantity: item.quantity + 1, // <-- update property } : item )); }; const removeQuantity = (cartItem) => { setCart(cart => cart.map(item => cartItem.id === item.id ? { ...item, quantity: item.quantity - 1, } : item )); }; return ( {cart.map((cartItem) => ( <tr key={cartItem.id}> <td class="quantity__item"> <div class="quantity"> <div class=" .... "> <button className='increase' onClick={() => removeQuantity(cartItem)}> - </button> {cartItem.quantity} <button className='increase' onClick={() => addQuantity(cartItem)}> + </button> </div> </div> </td> </tr> )) }); }

Dado que agregar/eliminar es esencialmente la misma acción, es común usar una sola función para manejar ambas y pasar la cantidad que desea ajustar.

 function CardItem() { const { cart, setCart } = useContext(ProductContext); const addQuantity = (id, amount) => () => { setCart(cart => cart.map(item => cartItem.id === id ? { ...item, quantity: item.quantity + amount, } : item )); }; return ( {cart.map((cartItem) => ( <tr key={cartItem.id}> <td class="quantity__item"> <div class="quantity"> <div class=" .... "> <button className='increase' onClick={addQuantity(cartItem.id, -1)} > - </button> {cartItem.quantity} <button className='increase' onClick={addQuantity(cartItem.id, 1)} > + </button> </div> </div> </td> </tr> )) }); }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Recomendaré usar reductores con contexto para administrar el estado. Algo así como debajo de un nuevo CartReducer con acciones AGREGAR y ELIMINAR elementos, etc.

 const [state, dispatch] = useReducer(CartReducer, initalState); const addToCart = (id) => { dispatch({ type: ADD, payload: id}); }; const showHideCart = () => { dispatch({ type: SHOW, payload:'' }); }; const removeItem = (id) => { dispatch({ type: REMOVE, payload: id }); };

Puede consultar este proyecto si ayuda a carrito de compras con contexto-api

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda