私はこれに似た反応コンポーネントを持っています。これは内部的にハイチャートを使用します。これは、APIに状態プロパティの一部を提供して、APIからデータを取得してチャートをレンダリングします。ReactコンポーネントからのAJAXリクエスト
export default class CandlestickChart extends React.Component {
constructor (props) {
super(props);
this.state = {
apiParam1: this.props.propData.param1,
apiParam2: this.props.propData.param2,
chartConfig: this.getChartConfig(this.props.apiParam1),
};
}
componentDidMount() {
this.renderChart();
}
render() {
return (
<div className='col-lg-6'>
<div className='well'>
<ReactHighStock config={this.state.chartConfig} />
</div>
</div>
);
}
renderChart() {
var that = this;
NanoAjax.ajax({
url: 'myApi.com?param1=' + this.state.apiParam1 + '¶m2=' + this.state.apiParam2;
}, function (statusCode, responseText) {
//transform the data a bit
var chartConfig = that.getChartConfig(that.state.apiParam1);
chartConfig.series[0].data = chartData;
that.setState({
chartConfig: chartConfig
})
});
}
getChartConfig(param1) {
// returns HighCharts chartConfig object based on apiParam1
}
}
これは限りコンポーネントが静的であるとして完全に正常に動作し、paramsをレンダリングする初期時に設定されると、すなわち、親コントロールはそれを更新することはありません。ここに与えられたとしても、このアプローチは同じです:https://daveceddia.com/ajax-requests-in-react/
しかし、私の要件は、親コントロールは、これらの値と再新鮮なAJAX呼び出しを作るために、それを引き起こして、小道具param1
と、このコントロールのparam2
を更新できる、ということですチャートを新しいデータでレンダリングします。
これにアプローチする方法は?
'' will'を含む関数は 'setState'を呼び出しスタックから呼び出せないので、' renderWartReceiveProps'から 'renderChart'を呼び出せますか? –
componentWillReceivePropsは、setStateを呼び出す場所であり、二重レンダリングをトリガーしません。これは公式のdocs:componentWillReceiveProps()が新しいコンポーネントを受け取る前に呼び出されます。プロポーショナルな変更(たとえばリセット)に応答して状態を更新する必要がある場合は、this.propsとnextPropsを比較し、このメソッドでthis.setState()を使用して状態遷移を実行できます。 – lustoykov
今すぐ試してみてください:) –