我目前正在使用 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 行,elgetsassignedthis.getDOMNode();始终指向渲染函数 ( div "row pushdown") 中的顶级元素。那么this.getDOMNode()总是引用渲染函数中的顶级元素吗?我真正想做的是在最里面的div( .Chart) 中渲染 d3 图表。我第一次尝试这样做,this.getDOMNode().find('.Chart')但没有奏效。
第一个问题:我知道我不应该在这里尝试接触真正的 DOM,但是我将如何在 VirtualDOM 上进一步选择一些东西?
第二个问题:我知道,鉴于我对此很陌生,可能是我做错了。你能在这里提出更好的方法吗?
第三个问题:我想在同级添加图表图例div的".Chart"。我应该为此创建一个新组件吗?或者在我的 d3Chart 中我可以使用选择器来做到这一点吗?
预先感谢您的帮助!
PS我有一个问题:
我见过人们使用React.render(<Chart />,document.body)而不是在其中使用React.createElement。有人可以向我解释其中的区别吗?