• Empleos
  • Sobre nosotros
  • Empleos
    • Inicio
    • Empleos
    • Cursos y retos
  • Empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

101
Vistas
Tratando de manipular la matriz de estado en React

Necesito escribir dos funciones, una para actualizar carrito de compras con nuevos productos (reservas) y otra para quitar productos del carrito. Tengo muchos proveedores de productos, así que quiero dividir mi matriz de "carrito" en secciones como esta:

 [ "supplier1": ["product0": {props}, "product1": {props}, "productN": {props}], "supplier2": ["product0": {props}, "product1": {props}, "productN": {props}], "supplierN": ["product0": {props}, "product1": {props}, "productN": {props}], ]

Puedo agregar con éxito proveedores a mi matriz de estado y también enviar productos a las matrices de proveedores.
cuando uso

 setCart(cart)

la matriz del carrito se está actualizando, pero aún es una matriz antigua, por lo que React no volverá a procesar mi componente

Y en este caso

 setCart([...cart])

la matriz del carrito simplemente se vacía
Así que aquí está el código para agregar nuevos productos.

 const [cart, setCart] = useState([]) const addToCart = useCallback((options) => { //options.cart_section and options.reserve if(typeof cart[options.cart_section] === 'undefined'){ cart[options.cart_section] = [] } cart[options.cart_section].push(options.reserve) setCart([...cart]) }, [])

y codigo de retiro de productos del carrito

 const removeFromCart = useCallback((options) => { let index = cart[options.cart_section].indexOf(options.reserve) - 1 cart[options.cart_section].splice(index,1) setCart([...cart]) })

Elimina el producto especificado pero React no vuelve a renderizar el componente (igual que en la función a continuación)
Lo siento por mi inglés y gracias por la ayuda.

over 3 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

  • Punto de puño. No puede asignar un valor clave como lo hizo con la matriz. pero puede empujar objetos como elementos de matriz. cada objeto considerado como un proveedor único. Así que tu matriz debería ser así:
 [ { supplierName: 'supplie name 1', products: [ {name: 'product name 1'}, {name: 'product name 2'} ] }, { supplierName: 'supplie name 2', products: [ {name: 'product name 1'}, {name: 'product name 2'}] } ]
  • Segundo punto. nunca mutar el estado en sí mismo . estás mutando el carrito empujando algo dentro de él. De esta manera, reaccionar no volverá a procesar su componente ya que no está actualizando su estado a través de setState . tienes que crear una variable en tu función desde tu estado de esta manera:
 let tempCart = cart.map(object => ({...object}))

después de eso, puede enviar un nuevo proveedor o producto y, al final, debe actualizar su estado a través de setCart. Por aquí:

 setCart(tempCart)

de esta manera, está actualizando su estado a través de setState y reaccionar tratará esta acción como (necesita DOM para actualizar), luego su componente se volverá a procesar

over 3 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 Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda