React: Получить высоту блока, содержащего динамически генерированные компоненты

Есть набор компонентов, которые динамически генерируются при нажатии на button. В примере ниже, это однотипный компонент. В реальном проекте это разные компоненты, для отрисовки которых требуется определенное время, например, google карты.

Этот набор компонентов рендерится в левом блоке. В правом блоке (sidebar) мне необходимо получить суммарную высоту левого блока после окончательной отрисовки каждого из компонентов.

В примере, я создал ссылку на DOM узел левого блока и передал его в компонент sidebar. Однако, вижу, что высота левого блока отображается не корректно. Она как бы запаздывает что ли. Т.е. показывает высоту предыдущего рендеринга. А мне необходимо текущее состояние.

Каким образом я могу это сделать?

https://codesandbox.io/s/xenodochial-https-r52x7?

export default class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      count: 2
    };

      this.leftRef = React.createRef();
  }

  genRandom = () => {
    let randomNumber = Math.floor(Math.random() * 10) + 1
    this.setState({ count: randomNumber})
  }

  render() {

    let components = [];

    for (let i = 0; i < this.state.count; i++) {
      let component = (<div className="children" key={i}>children height = 30px</div>)
        components.push(component);
    }
    
return (
      <div className="App">
        <div>
        <button type="button" onClick={this.genRandom}>generate random childrens</button>
        </div>
        <div className="left" ref={this.leftRef}>
          {components}
        </div>
        <Sidebar leftRef={this.leftRef}/>
      </div>
    );
  }
}

function Sidebar(props) {
  let height = 0;
  if(props.leftRef.current){
    console.log(props.leftRef.current.getBoundingClientRect());
    height = props.leftRef.current.getBoundingClientRect().height;
  }
  return <div className="sidebar">Sidebar height = {height} px</div>
}

Ответы (0 шт):