首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ajax请求之前呈现React

在ajax请求之前呈现React
EN

Stack Overflow用户
提问于 2017-08-16 12:09:59
回答 1查看 829关注 0票数 1

嗨,我是新的反应,并试图建立一个反应组件,应该显示图表,我正在使用融合图表这样做。我需要通过API动态地获取数据,以便将数据输入图表。但是图表在没有数据的情况下呈现,只有在加载图表之后才会启动ajax请求。此外,我还想知道如何在数据可用后重新呈现ReactDOM。

我的代码片段:

代码语言:javascript
复制
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')
);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-16 12:24:40

编辑

因为这里的指针this很棘手。因此,在ajax调用之前,您需要通过赋值that = this来指向“当前”对象。

另一种方法是绑定ajax函数。

$.ajax({...}).bind(this)

我会把你的chartData存储在state里。然后,如@Dimitar所述,在componentWillMount中执行ajax。ajax调用完成后,使用setState触发render

代码语言:javascript
复制
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 {
  constructor(props) {
    super(props);
    this.state = {
      chartData: null; // OR whatever type to fit your data
    }
  }
  
  componentWillMount() {
    let that = this
    $.ajax({
      type: "GET",
      url: 'someurl',
      dataType: "json",
      success: function (data) {
        console.log(data);
        that.setState({chartData: data});
      }
    });
  }
  
  render() {
    let 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')
);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45713206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档