我綁在組件的根DOM元素的中間定位一個圓圈:React.js:參考文獻並非適用於初次呈現
var App = React.createClass({
render: function() {
return <svg ref="svg">
<circle r="9" cx={this.centerX()} cy="15"/>
</svg>;
},
centerX: function() {
var svg = this.refs.svg.getDOMNode();
return svg.offsetLeft + Math.round(svg.offsetWidth/2);
}
});
雞還是先有蛋的問題發生在這裏:this.refs
在第一個渲染中未定義。解決這個問題的最好方法是什麼?我不想引用外部DOM節點(如document.body
)。
當然,如果您知道svg元素的尺寸,您也可以計算渲染中的適當中心以避免必須從DOM讀取數據。在這種情況下,它不會特別明顯,但對於性能來說,最好避免從DOM讀取並儘可能重新渲染。 –
@BenAlpert好點。雖然在這種情況下代碼引用了'offsetLeft',這是相對於DOM節點的最近位置父親。直到offsetParent和this元素都已呈現給DOM,才能獲得該數字。這可能會更好地解決在CSS中,但這似乎是最合適的原始文章中的代碼。 –
我完全同意。我的評論主要針對原始海報,作爲可選的增強功能。 –