调整包含 SVG (d3) 的 React 组件的大小

Posted

技术标签:

【中文标题】调整包含 SVG (d3) 的 React 组件的大小【英文标题】:Resizing React component that holds SVG (d3) 【发布时间】:2018-04-15 00:40:39 【问题描述】:

我在简单的反应应用中有以下组件结构

<div id='app'>
 <Navbar />
 <Graph />
 <Footer />
</div>

导航栏的高度固定为 80 像素

页脚的高度固定为 40px

Graph 是一个 d3-wrapper div,它包含带有图形元素的 SVG。

    如何将 Graph 放入屏幕的剩余高度,使其始终占据屏幕的剩余高度?

    如何在调整大小事件时更新包含 d3-wrapper/SVG 的反应组件?

PS。由于我希望图表具有响应性,因此我不应该对 SVG 的宽度和高度进行硬编码。

Here 是我试图解决这个问题的 codepen sn-p。

【问题讨论】:

确保您的页脚和导航栏位置固定.. 【参考方案1】:

好的,我已经找到了解决方案。 最短的方法是将大部分工作留给 css:

.d3-wrapper 
  width: 100%;
  height: calc(100vh - #$footerHeight + $navbarHeight); 


svg 
 width: 100%;
 height: 100%;

然后在 d3-wrapper 组件中,如果需要,创建 ref 到 div 并将 clientWidth 和 clientHeight 作为道具传递给 svg 组件。

对于调整大小更新,添加调整大小监听器并使 svg 组件自行更新。

【讨论】:

以上是关于调整包含 SVG (d3) 的 React 组件的大小的主要内容,如果未能解决你的问题,请参考以下文章

使D3堆积条形图填充父SVG容器

D3 在调整大小窗口上更改 SVG 尺寸

d3.js Map (<svg>) 自动适应父容器并随窗口调整大小

d3js:Svg元素在更改窗口大小时未调整大小

调整全屏世界地图 D3JS 的大小

REACT-D3 network-visual-graph(关系图谱)