Estoy teniendo problemas cuando quiero actualizar el estado de un arreglo y estoy usando el método push() para agregar los nuevos valores pero aparentemente push no actualiza, así que tengo dudas si puedo hacer un setState de múltiples valores.
Aquí está el código con el método push():
buildDetailDB = () => { let {detail} = this.state; //console.log(detail) let dms=[]; detail.dms.map(fabric => { dms.push({ "line_id": fabric.line_id, "id": fabric.id, "dm": fabric.dm, "priceWhite": fabric.priceWhite, "priceMedium": fabric.priceMedium, "priceDark": fabric.priceDark, "priceSpecial": fabric.priceSpecial, "priceWhiteC": 0, "priceMediumC": 0, "priceDarkC": 0, "priceSpecialC": 0, "Blong": this.FixElementValue(fabric.Blong), "Bwidth": this.FixElementValue(fabric.Bwidth), "fabricType": fabric.fabricType, "weightBWashOriginal": this.FixElementValue(fabric.weightBWashOriginal), "weightBWashCalculated": this.FixElementValue(fabric.weightBWashCalculated), "dm_width": this.FixElementValue(fabric.dm_width), "markerWidth": this.FixElementValue(fabric.markerWidth), "dm_pt": fabric.dm_pt, "yieldydslbs": this.FixElementValue(fabric.yieldydslbs), "markerEfficiency": this.FixElementValue(fabric.markerEfficiency), "markerLong": this.FixElementValue(fabric.markerLong), "pieceByMarker": this.FixElementValue(fabric.pieceByMarker), "lbsunit": this.FixElementValue(fabric.lbsunit), "lbsunitwaste": this.FixElementValue(fabric.lbsunitwaste), "sqinchunit": this.FixElementValue(fabric.sqinchunit), "ydsunit": fabric.ydsunit, "bydspunit": this.FixElementValue(fabric.bydspunit), "blbspunit": this.FixElementValue(fabric.blbspunit), }) console.log(fabric) return fabric; });No estoy completamente seguro de cómo se ve el resto de su estado de detail , pero supongo que es una matriz de objetos. En lugar de desestructurar sus detail del estado y realizar actualizaciones de esa manera, puede utilizar la devolución de llamada prevState que ofrece setState() .
Lo siguiente a continuación debería llevarlo allí.
buildDetailDB = () => { this.setState(prevState => ({ detail: [ ...prevState.detail, { dms: prevState.detail.dms.map((fabric) => ({ line_id: fabric.line_id, id: fabric.id, dm: fabric.dm, priceWhite: fabric.priceWhite, priceMedium: fabric.priceMedium, priceDark: fabric.priceDark, priceSpecial: fabric.priceSpecial, priceWhiteC: 0, priceMediumC: 0, priceDarkC: 0, priceSpecialC: 0, Blong: this.FixElementValue(fabric.Blong), Bwidth: this.FixElementValue(fabric.Bwidth), fabricType: fabric.fabricType, weightBWashOriginal: this.FixElementValue(fabric.weightBWashOriginal), weightBWashCalculated: this.FixElementValue( fabric.weightBWashCalculated ), dm_width: this.FixElementValue(fabric.dm_width), markerWidth: this.FixElementValue(fabric.markerWidth), dm_pt: fabric.dm_pt, yieldydslbs: this.FixElementValue(fabric.yieldydslbs), markerEfficiency: this.FixElementValue(fabric.markerEfficiency), markerLong: this.FixElementValue(fabric.markerLong), pieceByMarker: this.FixElementValue(fabric.pieceByMarker), lbsunit: this.FixElementValue(fabric.lbsunit), lbsunitwaste: this.FixElementValue(fabric.lbsunitwaste), sqinchunit: this.FixElementValue(fabric.sqinchunit), ydsunit: fabric.ydsunit, bydspunit: this.FixElementValue(fabric.bydspunit), blbspunit: this.FixElementValue(fabric.blbspunit), })), }, ], })); };@eduardorh1312 Se agregó ese parámetro de devolución de llamada prevState.
O otra forma sería simplemente hacer lo que hiciste y establecer el estado al final de empujar
buildDetailDB = () => { let {detail} = this.state; //console.log(detail) let dms=[]; detail.dms.forEach(fabric => { dms.push({ "line_id": fabric.line_id, "id": fabric.id, "dm": fabric.dm, "priceWhite": fabric.priceWhite, "priceMedium": fabric.priceMedium, "priceDark": fabric.priceDark, "priceSpecial": fabric.priceSpecial, "priceWhiteC": 0, "priceMediumC": 0, "priceDarkC": 0, "priceSpecialC": 0, "Blong": this.FixElementValue(fabric.Blong), "Bwidth": this.FixElementValue(fabric.Bwidth), "fabricType": fabric.fabricType, "weightBWashOriginal": this.FixElementValue(fabric.weightBWashOriginal), "weightBWashCalculated": this.FixElementValue(fabric.weightBWashCalculated), "dm_width": this.FixElementValue(fabric.dm_width), "markerWidth": this.FixElementValue(fabric.markerWidth), "dm_pt": fabric.dm_pt, "yieldydslbs": this.FixElementValue(fabric.yieldydslbs), "markerEfficiency": this.FixElementValue(fabric.markerEfficiency), "markerLong": this.FixElementValue(fabric.markerLong), "pieceByMarker": this.FixElementValue(fabric.pieceByMarker), "lbsunit": this.FixElementValue(fabric.lbsunit), "lbsunitwaste": this.FixElementValue(fabric.lbsunitwaste), "sqinchunit": this.FixElementValue(fabric.sqinchunit), "ydsunit": fabric.ydsunit, "bydspunit": this.FixElementValue(fabric.bydspunit), "blbspunit": this.FixElementValue(fabric.blbspunit), }) this.setState({detail: {...detail, dms}}) });