首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用获取数据的React-D3

使用获取数据的React-D3
EN

Stack Overflow用户
提问于 2020-03-02 21:01:03
回答 1查看 229关注 0票数 1
代码语言:javascript
复制
class MyChart extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      data: null
    }

    this.fetchData = this.fetchData.bind(this);
    this.barChart = this.barChart.bind(this);
  }

  componentDidMount() {
    this.fetchData();
    this.barChart(this.state.data);
  }

  fetchData() {
    const API = 'https://raw.githubusercontent.com/freeCodeCamp/ProjectReferenceData/master/GDP-data.json'

    fetch(API)
    .then(response => response.json())
    .then(data => {
      this.setState({
        data: data.data
      })
    })
  }

  barChart(dataset) {
    const canvasWidth = 600;
    const canvasHeight = 400;
    const svgCanvas = d3.select(this.refs.canvas)
                     .append('svg')
                     .attr('width', canvasWidth)
                     .attr('height', canvasHeight)

    const xScale = d3.scaleLinear()
                      .domain([0, d3.max(dataset, d => d[0])])
                      .range([0, canvasWidth])

    const yScale = d3.scaleLinear()
                      .domain([0, d3.max(dataset, d => d[1])])
                      .range([canvasHeight, 0])

    svgCanvas.selectAll('rect')
            .data(dataset)
            .enter()
              .append('rect')
              .attr('class', 'bar')
              .attr('x', (d, i) => i * 30)
              .attr('y', d => yScale(d[1]))
              .attr('width', xScale(25))
              .attr('height', d => yScale(d[1]))

  }

  render() {
    return (
      <d>
        <div id='title'>my chart</div>
        <div ref='canvas'></div>
      </d>
    )
  }
}

ReactDOM.render(<MyChart />, document.getElementById('app'))

我正在使用React和D3来可视化图形。我试图获取GDP的数据,并使用这些数据,但我在页面上什么也得不到。

当我只是将一个数组作为自己测试的输入,而不是获取数据时,它至少显示了一些基于输入的内容。我认为问题是在获取数据时出现的

对这件事有什么想法?

EN

回答 1

Stack Overflow用户

发布于 2020-03-02 22:08:51

当组件开始呈现时,第一件事就是在componentDidMount()中调用componentDidMount() .So。

  1. fetching
  2. 渲染条形图,将在same batch

中运行

因此,当api调用发生时,setState不会分配state.data值,因为它是异步的。但是下一步,当你的条形图想要渲染时,它会得到空值作为参数。

这就是它不能工作的原因。

我建议您将this.barChart(data.data)放入fetch api中。

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

https://stackoverflow.com/questions/60489420

复制
相关文章

相似问题

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