当前位置: 首页 > 知识库问答 >
问题:

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

国兴文
2023-03-14

我正在尝试为我的每个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>
    );
  }

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

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

我应该如何在子组件中更改它?是否需要更改父渲染函数?

共有1个答案

曹高阳
2023-03-14

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

select(".container") // this should works
 类似资料:
  • 问题内容: 我试图通过对象属性(此示例的名称)并在函数的轻松循环中列出它们。我发现这样做有些尴尬,但这似乎不正确。 这是我得到的: 有一个更好的方法吗?我只需要一个循环即可遍历对象数组,列出所需的属性并创建许多html节点之一。 问题答案: 您可以简单地在数组上 映射

  • 问题内容: 错误的代码是: 我想做的是,当我单击时,我想刷新这两个图表。但是现在我使用了两个标签,其中第二个不起作用。 那么如何使用Ajax渲染两个图表呢? 问题答案: 您可以使用单个渲染多个组件。只需确保要更新的所有单个组件都有一个。在您的示例中,它将类似于: 这些ID仅需用空格分隔,而不能用逗号分隔(仅适用于)。

  • 问题内容: 我正在做一个Flask应用程序。我有一个登录区域,一个博客区域。如果要获取用户的登录名,我将呈现登录模板。但这不会呈现必须显示在登录区域下方的博客模板。 我将尝试使其更加清晰: 现在我有一个扩展它,并进入登录块。我有一个进入。如何同时渲染两者?当我这样做时,我只能在login.html或之一上调用它。 请帮帮我。如果你需要,我会提供更多详细信息。 问题答案: 你可能会以错误的方式考虑布

  • 我已经设置了两条不同的路线,但是两条路线都被渲染localhost:3000 我已经研究了关于同一问题的stackoverflow问题,但没有解决我的问题。 我把我的路线包装在开关中,试着交替路线的顺序,使用精确的,也强迫id只寻找数字。 有提到-反应路由器v4-渲染两个组件在同一路由 但无法解决我的问题 Table和Detail组件都是为localhost:3000渲染的,而我只想为localh

  • 问题内容: 我想在我的ajax请求完成后呈现我的组件。 在下面您可以看到我的代码 但是我收到下面的错误,因为我正在ajax请求的done方法内返回render。 有没有办法在开始渲染之前等待我的ajax请求结束? 问题答案: 有两种处理方法,您可以选择哪种方法取决于应该拥有数据的组件和加载状态。 将Ajax请求移至父级并有条件地渲染该组件: 将Ajax请求保留在组件中,并在加载时有条件地渲染其他内

  • 非常简单的例子:我的App.js文件读取 我的Test.js文件上写着 在控制台中,渲染总是打印两次。为什么啊?