【发布时间】:2017-05-16 10:15:37
【问题描述】:
我目前正在使用 reactjs 制作仪表板,其中有 4 个选项卡或按钮图表正在正确创建,但唯一的问题是,当我们单击不同的仪表板并且它在同一个面板中具有相同的图表而不是图表没有更新时,我同时使用了这两个componentDidMount() 和 componentDidUpdate 虽然它给出了正确的输出但它创建了一个无限循环我也应用了一些条件但它仍然处于无限循环中谁能帮助我??
这是我的代码
class BarChartComponent extends React.Component
{
constructor(props)
{
super(props);
this.state = {
data: null
}
};
componentDidMount()
{
var that = this;
$.ajax({
method: "GET",
url: "http://10.0.3.8:8050/querydata?query_id="+that.props.id,
success: function(data)
{
console.log("component did mount method called");
console.log(1,JSON.stringify(data));
var BarChartData = [
{
key: "totals",
values: []
}
];
data.forEach(function (d)
{
d.value= +d.value
BarChartData[0].values.push(d)
})
console.log(2,JSON.stringify(BarChartData))
that.setState({data:BarChartData});
},
error: function(XMLHttpRequest, textStatus, errorThrown)
{
console.error("Status: " + textStatus);
console.error("Error: " + errorThrown);
}
});
}
componentDidUpdate(prevProps, prevState)
{
if(prevState.data !== this.state.data )
{
var that = this;
$.ajax({
method: "GET",
url: "http://10.0.3.8:8050/querydata?query_id="+that.props.id,
success: function(data)
{
console.log("component did update method called");
var BarChartData = [
{
key: "totals",
values: []
}
];
data.forEach(function (d)
{
d.value= +d.value
BarChartData[0].values.push(d)
})
if( prevProps.id !== that.state.id )
{
that.setState({data:BarChartData});
console.log(3,JSON.stringify(BarChartData))
console.log(4,JSON.stringify(that.state.data))
}
},
error: function(XMLHttpRequest, textStatus, errorThrown)
{
console.error("Status: " + textStatus);
console.error("Error: " + errorThrown);
}
});
}
}
render()
{
if (this.state.data==null)
{
return (<h1>Loading...</h1>);
}
return (
<NVD3Chart type="discreteBarChart" datum={this.state.data} x="name" y="value"/>
);
}
}
window.BarChartComponent = BarChartComponent;
【问题讨论】:
标签: javascript ajax reactjs