Tengo un objeto en estado de uso que tiene una matriz dentro llamada detalle. Esta matriz contiene objetos que necesito actualizar, por ejemplo, para cambiar cantidades o precios de compra.
createdAt: "2022/07/15" detail: Array(2) 0: name: "LINK AZUL" provider: {uid: '6271a32082193f4b88e292f0', name: 'Genérico'} purchasePrice: 195 quantity: 3 subtotal: 585 total: 0 _id: "62ab8f3cd0519268de938c8f" [[Prototype]]: Object 1: {provider: {…}, _id: '62ab8ed6d0519268de938bc9', name: 'LINK ROJO', quantity: 3, purchasePrice: 186, …} length: 2 [[Prototype]]: Array(0) disabledBy: [] discount: 10 idProvider: {_id: '6271a32082193f4b88e292f0', name: 'Genérico'}¿Cómo puedo acceder al _id del objeto dentro de la matriz de detalles para poder modificarlo y configurarlo en useState?
He probado con este código donde busco _id pero luego no se como ponerlo en el arreglo de objetos llamado detail para que solo se modifique ese objeto sin alterar el resto Además de eso creo que no funcionará correctamente.
const onChangePriceHandler = (id, e) => { let newPrice = Number(e.target.value) const updatePrice = products.detail?.map(data => { if (data.id === id) { return { ...data, purchasePrice: newPrice, subtotal: newPrice * data.quantity } } return data }) setProducts( /* ?? */) }Lo que podría hacer es guardar el estado en una variable y luego actualizar la identificación de esa variable a lo que desea y luego establecer el estado en esa variable actualizada
const functionThatUpdatesTheState = ()=> { let variable = stateValueWeHaveNow; variable......id = theUpdatedId; setState(variable) }puedes actualizar el estado haciendo esto
const onChangePriceHandler = (id, e) => { let newPrice = Number(e.target.value) const newProducts= products?.map(product=> { const dataIndex = (product.detail || []).findIndex((_data) => _data._id === id); const detail = dataIndex > 0 ? [...product.detail].splice(dataIndex, 1, { ...product.detail[dataIndex], purchasePrice: newPrice, subtotal: newPrice * product.detail[dataIndex].quantity, }) : product.detail; return dataIndex > 0 ? { ...product, detail, } : product; }) setProducts( [...newProducts]) //<--- }