el siguiente fragmento de código devuelve NaN aunque los valores que forman la expresión son todos números válidos. Estoy bastante confundido y frustrado xD. ¿Cuál es mi error aquí?
private getAllData = (res: any) => { this.setState({ priceBinance: res["binance"]["price"] }) this.setState({ volumeBinance: res["binance"]["volume"] }) this.setState({ highBinance: res["binance"]["high"] }) this.setState({ lowBinance: res["binance"]["low"] }) this.setState({ priceCrypto: res["crypto"]["price"] }) this.setState({ volumeCrypto: res["crypto"]["volume"] }) this.setState({ highCrypto: res["crypto"]["high"] }) this.setState({ lowCrypto: res["crypto"]["low"] }) this.setState({ priceKraken: res["kraken"]["price"] }) this.setState({ volumeKraken: res["kraken"]["volume"] }) this.setState({ highKraken: res["kraken"]["high"] }) this.setState({ lowKraken: res["kraken"]["low"] }) // THIS IS WHERE IT FAILS this.setState({ priceAverage: (this.state.priceBinance! + this.state.priceCrypto! + this.state.priceKraken!) / 3.0 }) this.setState({ voulumeAverage: (this.state.volumeBinance! + this.state.volumeCrypto! + this.state.volumeKraken!) / 3.0 }) this.setState({ highAverage: (this.state.highBinance! + this.state.highCrypto! + this.state.highKraken!) / 3.0 }) this.setState({ lowAverage: (this.state.lowBinance! + this.state.lowCrypto! + this.state.lowKraken!) / 3.0 }) }setState es una función asíncrona por la cual obtiene NaN. Intente configurar cada estado usando la variable res y no use this.state .
setState es una operación asíncrona, lo que significa que una vez que establece un valor para el estado, no es necesario que actualice inmediatamente el estado y, además, está forzando a desenvolver los valores de estado usando ! , para lo cual está obteniendo NaN implica que el valor del estado aún no se ha actualizado cuando intenta acceder al valor del estado, hay dos enfoques para resolver esto:
Invoque una devolución de llamada una vez que se actualice el estado (no recomendado, ya que debe hacerlo para cada valor de estado).
Use la propiedad res para obtener el valor directamente y realizar la operación deseada.
this.setState({ priceAverage: (res["binance"]["price"] + res["crypto"]["price"] +res["kraken"]["price"]) / 3.0 })