我目前正在使用 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
getsassignedthis.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
。有人可以向我解释其中的区别吗?