2017-02-12 5 views
0

親要素に応じてコンポーネントの寸法を設定する必要があります。レンダリングする前に、virtualDOMからのrefによって親の幅と高さを取得することは可能ですか?レンダリングする前に親ノードにvirtualDOMからアクセスする| ReactJS

export default class App extends React.Component { 
 
    render() { 
 

 
    return (
 
     <div> 
 
     <div className={'avocado-container'} ref={(container) => { this.container = container; }}> 
 
      <Resizer parent={this} scrollAxis={'y'}> 
 
      </Resizer> 
 
     </div> 
 
     </div> 
 
    ); 
 
    } 
 
}

私は子供のコンストラクタで寸法を取得する必要があります。

this.refs.container.offsetWidthのようなもので可能ですか?

+0

なぜ親コンポーネントから小道具として渡さないのですか? – havenchyk

答えて

0

レイアウトの寸法は、仮想DOMではなくブラウザによって計算されます。寸法を手で設定するか、CSSを使用して子コンポーネントの幅と高さを設定します。 componentDidMountのレンダリングされたコンポーネントから幅と高さを読み取ってそこにsetStateを呼び出すこともできます。これは理想的ではないため、2度目のレンダーが発生することがあります。

+0

このようなコンポーネントはテスト可能ですか? – havenchyk

+0

didMountで要素の大きさの流れの読みをテストする必要がある場合は、jsdomのようなツールを使用して必要な環境を提供することができます。あなたがそれをテストしたくなければ、didMountの 'if'文を実行して、' global.window'のような特定のオブジェクトの存在を確認することができます –

+0

私は間違っていませんが、jsdomはサポートしていませんhtml要素の実際の幅と高さを取得するため、実際のブラウザ環境を使わずにテストするのは難しいasaik – havenchyk

関連する問題