javascript - 为什么当输入类型改变时这个 d3 组件不起作用?

标签 javascript d3.js reactjs

我正在关注 this tutorial for React and d3 ,现在我正在尝试使用状态遵循的模式。

我正在更改提供初始状态的函数

var randomData = [];
d3.range(settings.numDataPoints).forEach(function() {
      var newNumber1 = Math.floor(Math.random() * settings.maxRange());
      var newNumber2 = Math.floor(Math.random() * settings.maxRange());
      randomData.push([newNumber1, newNumber2]);
    });

var randomData = d3.range(settings.numDataPoints).map(function(thisPoint) {
      var newNumber1 = Math.floor(Math.random() * settings.maxRange());
      var newNumber2 = Math.floor(Math.random() * settings.maxRange());
      return {ind: thisPoint, coords: [newNumber1, newNumber2]};
    });

因此,我还必须更改 DataCircles renderCircles() 函数

  renderCircles: function(coords) {
    var props = {
      cx: this.props.xScale(coords[0]),
      cy: this.props.yScale(coords[1]),
      r: 2,
      key: uuid.v4()
    };
    return (
      <circle {...props}>
      </circle>
    );
  }

  renderCircles: function(coordsObj) {
    var props = {
      cx: this.props.xScale(coordsObj.coords[0]),
      cy: this.props.yScale(coordsObj.coords[1]),
      r: 2,
      key: uuid.v4()
    };
    return (
      <circle {...props}>
      </circle>
    );
  }

这会导致教程中创建的 XY 网格上所有先前渲染良好的点消失,只留下空白图形:

blank graph

我已经记录了两个函数作用域中的对象,并验证了数据是否正确生成。这是怎么回事?

最佳答案

您正在更改 randomData 的结构,我认为您错过了它也是 <ScatterPlot /> 的支柱。组件,因此您还需要更新它:

getXScale: function(props) {
  var xMax = d3.max(props.data, function(d) { return d.coords[0] });
  return d3.scale.linear()
    .domain([0, xMax])
    .range([props.padding, props.width - props.padding * 2]);
},

getYScale: function(props) {
  var yMax = d3.max(props.data, function(d) { return d.coords[1] });
  return d3.scale.linear()
    .domain([0, yMax])
    .range([props.height - props.padding, props.padding]);
},

关于javascript - 为什么当输入类型改变时这个 d3 组件不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33768593/

相关文章:

javascript - 在 React JS 中,在哪里对更改的子属性进行操作

unit-testing - 向 React 组件发送 props 以进行 Jest 单元测试

javascript - 页面加载时如何在jquery中获取增量值

javascript - 使用 react-native 中的 swipeout 将函数从父容器传递到子容器

javascript - selection.enter() 不是函数

typescript - 如何在 typescript 中将 C3 圆环图制作成半圆或半圆环图?

javascript - 使用 Angular1+ ES6 时, Controller 函数中的依赖注入(inject)未定义, Controller 作为类

javascript - 如何用react-router替换react组件

jquery - 在 jquery 之后绘制 dimple.js 图表时,Firefox 中的 NS_ERROR_FAILURE

reactjs - react Hook : Component is not rendering in Nested Routing