こんにちは私は反応して反応チャートを表示する反応コンポーネントを作成しようとしていますが、これを行うには融合チャートを使用しています。そして、私はそれをグラフにフィードするAPIを介して動的にデータを取得する必要があります。しかし、チャートはデータなしでレンダリングされ、ajaxリクエストはチャートがロードされた後にのみ開始されます。 this
がここにトリッキーであるポインタとしてReact DOMはajaxリクエストの前にレンダリングされます
import React from 'react';
import ReactDOM from 'react-dom';
import $ from 'jquery'
import FusionCharts from 'fusioncharts';
import ReactFC from 'react-fusioncharts';
import chart from 'fusioncharts/fusioncharts.charts';
class MyApp extends React.Component {
render() {
var chartData;
$.ajax({
type: "GET",
url: 'someurl',
dataType: "json",
success: function (data) {
chartData =data;
alert(chartData);
}
});
var chartConfigs = {
type: "Column2D",
className: "fc-column2d", // ReactJS attribute-name for DOM classes
dataFormat: "JSON",
dataSource: {
chart:{},
data: chartData
}
};
return (
<div>< ReactFC {...chartConfigs }/></div>
);
}
}
ReactDOM.render(
<MyApp />,
document.getElementById('chart-container')
);
ライフサイクルメソッドを使用して...レンダリングにおけるAjaxコードを追加しない - https://facebook.github.io/react/docs/react-component.html これが属します'componentWillMount(){}'の中で、 '読み込み'のようなプレースホルダーをレンダリングし、データが到着したときに状態を変更する必要があります。 –
@DimitarChristoff Depends-didMountは、サーバーサイドレンダリングの回避策を使用していない限り、公式の推奨事項です。 –
おそらく真ですが、レンダリングの前に設定状態のような他のコンポジションを実行できるので、私は 'willMount/willUnmount'を好むでしょう。私の基準は:操作がDOMに触れる/作業する必要がない場合、レンダリングする前に熱心に/早く実行し、そうでなければ、マウントを待つ。真実は言いますが、私は小道具としてデータを取得するだけではなく、バックエンドに関するドメイン知識を持つUIコンポーネントを作成して以来、しばらくしています。これは、あなたがreduxやmobxのようなモデルを考慮する前に、物事を動かすための素早いハックです。 –