在同一个 div 中渲染 Reactjs 多个“d3js”子组件

Posted

技术标签:

【中文标题】在同一个 div 中渲染 Reactjs 多个“d3js”子组件【英文标题】:Rendering Reactjs multiple "d3js" child components in the same div 【发布时间】:2018-08-12 03:46:38 【问题描述】:

我正在尝试为我的每个 d3js 元素使用 reactjs 组件。父组件绘制一个图形,子组件应该在它周围画一个甜甜圈。但是现在渲染函数将它们分开绘制。以下代码显示了它如何在父组件中附加图形 svg(在 componentDidMount() 内):

this.svg = select(this.container).append('svg')
  .attr('width', width)
  .attr('height', height)
  .append('g')
  .classed('network', true)
  .attr('transform', `translate($width / 2,$height / 2)`);

父组件渲染函数代码如下:

  render() 
    return (
      <div>
        <div className="container" ref=(container) =>  this.container = container;  />
        <div className="donut" >
          <DonutComponent  />
        </div>
      </div>
    );
  

我认为子组件中存在一个问题,我尝试了select("#container"),但没有找到。所以我不得不使用select("body"),它将甜甜圈附加到一个单独的div:

  var svgContainer = select("body")
    .append("svg")
      .attr("width", width)
      .attr("height", height)
      .style("border", "1px solid");

我应该如何在子组件中更改它?我需要更改父渲染功能吗?

【问题讨论】:

【参考方案1】:

您尝试选择一个 id,但您的容器是一个类。

select(".container") // this should works

【讨论】:

啊,这是一个愚蠢的错误!谢谢!现在这两个 SVG 在同一个 div 中。但它仍然将它们分开绘制。我应该如何在图表周围制作甜甜圈?!我认为现在它更像是 html 和 CSS 问题,而不是 Reactjs! 是的,现在肯定是一个 css 问题,没有 svg 很难找到解决方案,你能创建一个快速的 plunker 吗?

以上是关于在同一个 div 中渲染 Reactjs 多个“d3js”子组件的主要内容,如果未能解决你的问题,请参考以下文章

reactjs - 如何隐藏一个div并将其替换为reactjs中的另一个div?

为啥 ReactJS 不在另一个组件中渲染一个组件?

我想在 reactjs 中实现一个条件渲染系统

如何在ReactJS中使用多个对话框和渲染模式

ReactJS 根据数组的值渲染 OBJ.map

如何在 reactjs 中使用 onclick 事件渲染子组件?