【发布时间】:2023-04-10 05:08:01
【问题描述】:
我目前正在使用 react 来创建 d3 可视化。我对render 和componenetDidMount 方法之间的关系有点困惑(方法是专有名词吗?)。这是我所拥有的(为简单起见,我排除了一些代码):
var Chart = React.createClass({
componentDidMount: function () {
var el = this.getDOMNode();
console.log(el);
d3Chart.create(el, {
width: '500',
height: '300'
}, this.getChartState(),this.getAccessState);
},
render: function () {
return (
<div className="row pushdown">
<div className="d3-block">
<div className="Chart" />
</div>
</div>
);
}
}
在第 3 行,el 被分配 this.getDOMNode();,它始终指向渲染函数中的顶级元素 (div "row pushdown")。那么this.getDOMNode() 是否总是引用渲染函数中的顶级元素?我实际上想要做的是在最里面的div (.Chart) 内渲染 d3 图表。我第一次尝试做this.getDOMNode().find('.Chart'),但没有奏效。
第一个问题:我知道我不应该在这里尝试接触真实的 DOM,但是我将如何在 VirtualDOM 上选择更远的东西?
第二个问题:我知道,鉴于我对此很陌生,可能这样做是错误的。您能在这里提出一个更好的方法吗?
第三个问题:我想在".Chart" 的兄弟div 中添加图表图例。我应该为此创建一个新组件吗?或者在我的 d3Chart 中我可以使用选择器来执行此操作吗?
提前感谢您的帮助!
附:我有一个问题:
我看到人们在其中使用React.render(<Chart />,document.body) 而不是React.createElement。有人可以向我解释其中的区别吗?
【问题讨论】:
标签: javascript jquery d3.js reactjs