12

对于我的应用程序,我需要渲染一些子元素,然后测量生成的 div。在伪代码中,它看起来像这样:

function getDims(child) {
    var testEl = document.getElementById('test-el');
    ReactDOM.render(child, testEl);
    var dims = testEl.getBoundingClientRect();
    ReactDOM.unmountComponentAtNode(testEl);
    return dims;
}

不幸的是,根据文档 ReactDOM.render 将来可能会变得异步。是否有面向未来的选项来强制同步渲染以使上述功能起作用?

4

1 回答 1

4

您可以将回调传递给ReactDOM.render(ReactElm, DOMNode, callback). callback一旦ReactElm加载DOMNode到.

希望这可以帮助!

function getDims(child) {
    var testEl = document.getElementById('test-el');
    ReactDOM.render(child, testEl, function(){
       var dims = testEl.getBoundingClientRect();
       ReactDOM.unmountComponentAtNode(testEl);
       return dims;
    }); 
}

使用示例:

class App extends React.Component{
  render(){ return <h1>Hello</h1>}
}
  
  ReactDOM.render(<App/>,
    document.getElementById('app'),
    () => console.log('Component Mounted'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="app"></div>

于 2016-10-29T12:50:22.640 回答