私はいくつかのDOMノードのサイズの計算(レンダリングされたDOMノードの上部、下部、およびサイズプロパティ)を作りたい状況によrefまたはfindDOMNodeを使用して要素のルートDOMノードを取得する必要がありますか?
私はcomponentDidUpdate
方法で、今やっていることにあります
componentDidUpdate() {
var node = ReactDOM.findDOMNode(this);
this.elementBox = node.getBoundingClientRect();
this.elementHeight = node.clientHeight;
// Make calculations and stuff
}
これは問題なく動作していますが、私は少し気になり、ベストプラクティスに反応します。 findDOMNodeの代わりにref
プロパティを使用することについていくつかの話がありますが、それらのすべてが子DOM要素用です。私の場合、私のコンポーネントのルートDOMノードのみが必要です。ただ、それは参照が私に正しい感じていないのです得るために、私のルートDOMノードへのREFコールバックを取り付け、正直に言うと
render(){
return (
<section // container
ref={(n) => this.node = n}>
// Stuff
</section>
}
componentDidUpdate() {
this.elementBox = this.node.getBoundingClientRect();
this.elementHeight = this.node.clientHeight;
// Make calculations and stuff
}
:
REFを使用して代替は次のようになります。
この場合のベストプラクティスとは何でしょうか?どれがパフォーマンスが良いですか?
私が見つけたドキュメントをもう一度読みます:>クラスのプロパティを設定するためにrefコールバックを使用するのは、DOM要素にアクセスする共通のパターンです。好ましい方法は、上の例のようにrefコールバックでプロパティを設定することです。 – Danielo515
ところで、あなたが気づいたかどうかはわかりませんが、JS Standardは '{(n)=> this.node = n} 'について" Arrow関数は代入を返すべきではありません "と言っています。私はそれが正当な苦情であるかどうか疑問に思います – revelt