子を含む親ReactコンポーネントとReactコンポーネント。
<div>
<div>Child</div>
</div>
親内に配置するには子コンポーネントにスタイルを適用する必要がありますが、その位置は親のサイズによって異なります。
render() {
const styles = {
position: 'absolute',
top: top(), // computed based on child and parent's height
left: left() // computed based on child and parent's width
};
return <div style={styles}>Child</div>;
}
上と左の位置は子と親の幅と高さの関数なので、ここではパーセント値を使用できません。
Reactこれを達成する方法は何ですか?
この質問に対する答えは、 Refs to Components で説明されているようにrefを使用することです。
根本的な問題は、要素を適切に配置するためにDOMノード(およびその親DOMノード)が必要ですが、最初のレンダリングが完了するまで利用できないことです。上記リンクの記事から:
DOM測定を実行するには、ほとんどの場合、「ネイティブ」コンポーネントに手を差し伸べ、refを使用して基礎となるDOMノードにアクセスする必要があります。 Refは、これを確実に行う唯一の実用的な方法の1つです。
解決策は次のとおりです。
_getInitialState() {
return {
styles: {
top: 0,
left: 0
}
};
},
componentDidMount() {
this.setState({
styles: {
top: computeTopWith(this.refs.child),
left: computeLeftWith(this.refs.child)
}
})
},
render() {
return <div ref="child" style={this.state.styles}>Child</div>;
}
_
これにより、最初のレンダリングの直後に要素が適切に配置されます。 propsの変更後に要素の位置を変更する必要がある場合は、componentWillReceiveProps(nextProps)
で状態を変更します。