【发布时间】:2017-08-16 20:41:25
【问题描述】:
您好,我是 react 新手,我正在尝试构建一个应该显示图表的 react 组件,我正在使用融合图表来执行此操作。我需要通过 API 动态获取数据以将其提供给图表。但是图表在没有数据的情况下呈现,并且仅在加载图表后才启动 ajax 请求。我还想知道一旦数据可用,如何重新渲染 ReactDOM
我的代码sn-p:
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 代码...使用生命周期方法 - facebook.github.io/react/docs/react-component.html 这属于
componentWillMount(){},您应该渲染一些占位符,例如“正在加载” - 然后在数据到达时更改状态. -
@DimitarChristoff Depends-didMount 是官方推荐的,除非您使用服务器端渲染的解决方法。
-
可能是真的,但它允许您在渲染之前进行其他组合,例如设置状态,所以我更喜欢
willMount / willUnmount。我的标准是:如果该操作不需要触摸/使用 DOM,请在渲染之前急切/尽早执行,否则,等待挂载。不过,说实话,我已经有一段时间没有编写具有后端领域知识的 UI 组件了,它不仅仅将其数据作为道具获取。这只是在考虑 redux 或 mobx 等模型之前让事情正常工作的快速技巧。
标签: jquery ajax reactjs fusioncharts