Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

408
Visualizações
¿Cómo actualizar React State en una matriz de objetos? Actualizar si existe id, de lo contrario agregar

el componente principal obtiene el objeto del componente secundario a través de la función de devolución de llamada. Quiero verificar si el objeto con el ID de fila específico existe, si existe, entonces debería actualizar el objeto con el valor pasado "val", de lo contrario, debería agregar el objeto dentro de la matriz de estado. Mi respuesta se agrega correctamente, pero no puedo actualizar los valores, ayúdenme. el objeto que se está pasando se adjunta al final.

 const [state, setState] = React.useState([]); const existingProduct = state && state.find((product) => product.rowID == index); if (!!existingProduct === false) { return setState((prevState) => [...prevState, object]); } console.log(state); let payload = { quantity: quantityRef.current && quantityRef.current.value, name: product && product.NAME, unit: product && product.UNIT, PRICE: product && product.PRICE, oldQuantity: oldQuantity, rowID: id, };
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Antes de responder, debo mencionar que !!existingProduct === false es muy confuso de leer. Simplemente puede hacer !existingProduct para lograr el mismo resultado.

A su código le faltan algunas partes, así que tendré que inferir, pero asumo que el valor del index hace lo que quiere, y ya está detectando si el producto está presente o no en la matriz. Y está agregando el nuevo producto en el if , entonces lo que necesitamos es un else .

Lo que haría sería copiar el estado en una nueva matriz, reemplazar el valor en la nueva matriz y establecer esta nueva matriz como el nuevo estado. Para saber qué posición de la matriz necesita actualizar, puede usar el método findIndex() en lugar de find() . Entonces, en lugar de que existingProduct sea un objeto, es el índice de la matriz que contiene ese objeto (así que lo llamaría Idx del Producto existingProductIdx solo para que quede claro):

 if (existingProductIdx === -1) { // product doesn't exist in the array ... } else { // product exists const newSate = [...state] // creates a copy of the current array newState[existingProductIdx] = payload // set the position of the array to payload (or whatever should be the new value) return setState(newState) }

Algunas notas:

  • Supongo que está haciendo esto dentro de una función que desea devolver antes y es por eso que tiene esa declaración de return . De lo contrario no lo necesitas
  • No recuerdo en este momento, pero estoy bastante seguro de que setState no tiene valor de retorno, por lo que en su lugar puede hacer setState(newState); return; . O bien, es posible que no necesite regresar en absoluto.
  • Le sugiero que cambie los nombres de las variables state y setState a algo más significativo, como products y setProducts
  • Nuevamente, espero que la sección central de su ejemplo de código pertenezca a una función, de lo contrario, eso estropearía su componente (que debería devolver una función de renderizado)
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda