汎用コンポーネントを作成しようとしています。他のアプリケーションで再利用できます。私はコンポーネントの内容を変更できるように、レンダリング後のコンポーネントの幅を知る必要があります。入手方法:実際にレンダリングした後のコンポーネントの幅
私は成功していない反応でさまざまなライフサイクルを使用しようとしてきました。
componentDidUpdate() {
console.log('width', this.element.offsetWidth);
}
render() {
return (
<div ref={(element) => {this.element = element }} />
);
}
私はこれをしようとすると、私は、画面の幅を取得しますが、私は、ウィンドウのサイズを変更した場合、私は、コンポーネントの幅を取得します。クロームログを参照してください:
ComponentDidMountのでthis.element
がundefined
あるレンダリングの前に実行されます。
私はまた、これをnpmから別のライブラリを使用して運がないまま解決しようとしました。
詳細情報:コンポーネントは、異なる幅でブートストラップカラム内で動作する必要があります。
render() {
<Row>
<Col sm={3} />
<MyComponent />
</Col>
<Col sm={9} />
<MyComponent />
</Col>
<Row>
}
明確化私は、ウィンドウのサイズを変更したくない、と私は明確にされていないことをお詫び申し上げます。私がサイズ変更について言及する唯一の理由は、DOMが作成されてサイズが変更されると、offsetWidth
に正しい値が得られることです。私はサイズを変更せずに正しい値を取得するソリューションを探しています。ポストレンダリング関数呼び出し、リスナー、リアクションマジック、またはその他の解決策。私の問題は、バーチャルVSとリアルDOMの知識の欠如です。あなたはコンポーネントの幅状態を保持する必要がある場合は
をレンダリングして、コンポーネントのサイズを変更するたびに、私は状態を設定した場合は、状態 – mersocarlin
を更新するとき、次が生成されますどのannon関数setState({element:element})は無限ループを生成します。私はまた、その要素が 'null'最初に実行することを参照してください –
私は状態に要素を格納するというよりもむしろ' width'値を格納すると言っていません。だから毎回それが変わります、あなたはあなたの状態価値を設定することができます。 – mersocarlin