Así que tengo esto:
let total = newDealersDeckTotal.reduce(function(a, b) { return a + b; }, 0); console.log(total, 'tittal'); //outputs correct total setTimeout(() => { this.setState({ dealersOverallTotal: total }); }, 10); console.log(this.state.dealersOverallTotal, 'dealersOverallTotal1'); //outputs incorrect total newDealersDeckTotal es solo una matriz de números [1, 5, 9] por ejemplo, this.state.dealersOverallTotal no proporciona el total correcto, pero ¿ total sí? Incluso puse un retraso de tiempo de espera para ver si esto resolvía el problema. ¿Algo obvio o debo publicar más código?
setState() suele ser asíncrono, lo que significa que en el momento en que console.log el estado, aún no está actualizado. Intente poner el registro en la devolución de llamada del método setState() . Se ejecuta después de que se completa el cambio de estado:
this.setState({ dealersOverallTotal: total }, () => { console.log(this.state.dealersOverallTotal, 'dealersOverallTotal1'); });setState es asíncrono. Puede usar el método de devolución de llamada para obtener el estado actualizado.
changeHandler(event) { this.setState({ yourName: event.target.value }, () => console.log(this.state.yourName)); }En el caso de los ganchos, debe usar el gancho useEffect .
const [fruit, setFruit] = useState(''); setFruit('Apple'); useEffect(() => { console.log('Fruit', fruit); }, [fruit])