2017-02-12 8 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

No. 레이아웃 크기는 가상 DOM이 아닌 브라우저에 의해 계산됩니다. 손으로 크기를 설정하거나 CSS를 사용하여 하위 구성 요소의 폭과 높이를 채 웁니다. componentDidMount에 렌더링 된 구성 요소의 너비와 높이를 읽고 거기에 setState을 호출하면 이상적이지 않고 두 번째 렌더링이 발생하지만 때로는 수행해야 할 수도 있습니다.

+0

해당 구성 요소를 테스트 할 수 있습니까? – havenchyk

+0

didMount에서 엘리먼트 차원 흐름의 읽기를 테스트해야하는 경우 jsdom과 같은 도구를 사용하여 필요한 환경을 제공 할 수 있습니다. 테스트하고 싶지 않다면 didMount에서'if' 문을 사용하여 'global.window'와 같은 특정 객체의 존재 여부를 확인할 수 있습니다 –

+0

나를 잘못하지는 않지만 jsdom은 지원하지 않습니다. HTML 요소의 실제 너비와 높이를 얻으므로 실제 브라우저 환경없이 테스트하기가 어렵습니다. asaik – havenchyk