Reactjs 试图设置react highcharts的状态,但它不是';不行吗?
如标题所述,如何在react for highcharts中使用状态值设置数据?此.state.number的值为0/未定义 代码Reactjs 试图设置react highcharts的状态,但它不是';不行吗?,reactjs,react-highcharts,Reactjs,React Highcharts,如标题所述,如何在react for highcharts中使用状态值设置数据?此.state.number的值为0/未定义 代码 getFirstMonthOpenEnhancements(){ fetch(`http://ca-fpscfb2:4000/1stMonthOpenedEnhancements?airline=${this.state.airlineName}&product=${this.state.airlineProduct}`) .then(res
getFirstMonthOpenEnhancements(){
fetch(`http://ca-fpscfb2:4000/1stMonthOpenedEnhancements?airline=${this.state.airlineName}&product=${this.state.airlineProduct}`)
.then(response => response.json())
.then( response =>
this.setState(
{
number: parseInt(response.data.total)
}
))
.catch(err => console.error(err))
}
componentDidMount(){
this.getFirstMonthOpenEnhancements();
let chart = this.refs.chart.getChart();
chart.series[4].setData([this.state.number, 4, 4, 4]);
}
this.state.number
属性未定义,因为您的API请求是异步的,所以当您请求this.state.number的值时,它未定义,因为您的API调用尚未返回
有两种不同的解决方案,但在我看来,最优雅的是回报承诺
getFirstMonthOpenEnhancements(){
return new Promise((resolve, reject) => {
fetch(`http://ca-fpscfb2:4000/1stMonthOpenedEnhancements?airline=${this.state.airlineName}&product=${this.state.airlineProduct}`)
.then(response => response.json())
.then( response =>
return resolve(parseInt(response.data.total))
))
.catch((err) => { return reject(err) });
});
}
componentDidMount(){
this.getFirstMonthOpenEnhancements()
.then((someNumber) => {
let chart = this.refs.chart.getChart();
chart.series[4].setData([someNumber, 4, 4, 4]);
this.setState({ number: someNumber });
})
.catch((err) => { console.log(err); });
}
设置state.number
属性值时的代码在哪里?这样我们就会知道为什么它的0或未定义基本上是从api获取数据,然后设置状态,然后尝试获取数字,但数字总是0或未定义,然而,当我在render方法中放入this.state.number时,数字出现了。您是否验证从api返回的数据和parseInt(response.data.total)
值不是0还是未定义?您可以通过插入console.log(parseInt(response.data.total))代码>在此.setState(…)之前是的,它是我从apiwhen获得的值,它是0/未定义?您显示的代码在componentDidMount
期间启动,例如在第一次渲染()时启动(除非您的初始状态指定了一些编号:…
,这意味着此.state.number将在该渲染期间未定义)。然后它是一个异步获取,因此最终的setState将触发一个重新渲染器,此时将存在this.state.number
。所以我们什么时候谈?另外,你能看看我在其他应用程序中遇到的另一个问题吗?它与这个问题无关,但是如果ud能够帮助解决这个问题那就太好了,:D,