【问题标题】:Trying to use D3 with React to create a bar chart尝试使用 D3 和 React 创建条形图
【发布时间】:2017-05-02 22:59:57
【问题描述】:

我正在尝试在我的 Web 应用程序上使用 D3 呈现一个简单的条形图,该应用程序使用 React 作为其前端。

我是 D3 的新手,我正忙于在我的网页上显示条形图,所以我认为对我来说最简单的事情就是找到一个呈现简单条形图的 jsfiddle使用 D3 (http://jsfiddle.net/tommy351/P4Z75/) 并将代码复制并粘贴到我的dashboard.tsx 文件中。

注意:我选择 D3 的原因是因为其他更易于使用的图表库与 React 更顺畅地集成(即 recharts、react-d3)没有 TypeScript 定义文件。

所以,这是我的 dashboard.tsx 文件的 sn-p:

         import * as React from "react";
         import * as ReactDOM from "react-dom";
         import * as D3 from "d3";

         var data = [4, 5, 10, 16, 23, 35];
         var width = 500;
         var barHeight = 20;

         var x = d3.scale.linear()
             .domain([0, d3.max(data)])
             .range([0, width]);

        var chart = d3.select('#chart')
             .attr('width', width)
             .attr('height', barHeight * data.length);

        var bar = chart.selectAll('g')
            .data(data)
            .enter()
            .append('g')
            .attr('transform', function (d, i) {
              return 'translate(0,' + barHeight * i + ')';
             });

       bar.append('rect')
             .attr('width', x)
             .attr('height', barHeight - 1);

       bar.append('text')
              .attr('x', function (d) {
                return x(d) - 3;
               })
              .attr('y', barHeight / 2)
              .attr('dy', '.35em')
              .text(function (d) {
                return d;
               });
      render() {
         return ( <div>
            <svg id="chart"></svg>
            </div>
        );
    }
}

我在控制台中遇到的错误是:

 Uncaught ReferenceError: Chartjs is not defined
   at Object.map../af (vendorReact.js:26748)
   at __webpack_require__ (vendorReact.js:53)
   at Object.<anonymous> (vendorReact.js:107)
   at __webpack_require__ (vendorReact.js:53)
   at vendorReact.js:96
   at vendorReact.js:99

 Dashboard.js:17482 Uncaught TypeError: Cannot read property 'linear' of 
    undefined
   at Object.<anonymous> (Dashboard.js:17482)
   at Object.<anonymous> (Dashboard.js:17721)
   at Object.163 (Dashboard.js:17723)
   at __webpack_require__ (vendorReact.js:53)
   at Object.0 (Dashboard.js:17)
   at __webpack_require__ (vendorReact.js:53)
   at webpackJsonpCallback (vendorReact.js:24)
   at Dashboard.js:1

我用许多 jsfiddles 尝试了同样的事情,并在我的控制台中得到了类似的错误,并且无法让图表呈现。知道可能是什么问题吗?

【问题讨论】:

  • 你可以通过使用javascript而不是打字稿来逃脱,你的脚本甚至没有反映打字稿的功能。
  • 使用 recharts(React 图表)之类的东西对我来说会更容易/更舒服,但 recharts 没有 TypeScript 定义文件。我刚刚向您展示了我的dashboard.tsx 文件的一个小sn-p,它实际上正在使用TypeScript 库/功能,它们只是没有反映在我向您展示的sn-p 中。
  • 没关系,用你觉得舒服的就行。 typescript 是 javascript 的一个子集。你可以在打字稿中使用 javascript。
  • 我在我的 TypeScript 中使用 JavaScript,我从 jsFiddle 的 JavaScript 中复制了所有代码。问题是所有外部 JavaScript 库都需要 TypeScript 定义文件

标签: reactjs typescript d3.js


【解决方案1】:

不确定您的第一个错误,但第二个错误可能是由于 d3 版本。如果您要导入最新版本的 d3,则 var x = d3.scale.linear() 需要为 var x = d3.scaleLinear()。请参阅docs 了解更多信息。

注意:我通常会将此作为评论,因为它并不能回答整个问题,因为我比能够发表评论还差 1 个声誉点。

【讨论】:

  • 我将该行更改为 var x = d3.scaleLinear() 但现在它给了我一个错误
  • 我的 IDE 中出现一个错误,上面写着 property 'scaleLinear' does not exist on type 'typeof d3'
  • 哦,等等,您已将 d3 导入为 D3 - import * as D3 from "d3";。资本有所作为。看看是否有效
  • 您将 d3 导入为 D3,但尝试使用 d3 调用它。尝试将您的导入语句更改为 import * as d3 from "d3"; 并保持其余代码不变。
  • 我只是把它改成了那个,我仍然遇到同样的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-14
  • 1970-01-01
  • 1970-01-01
  • 2017-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多