让A类在其render
方法中创建B类元素。 A类的呈现取决于B类生成的元素的计算大小,即它需要了解子项的呈现 DOM以呈现其自己的DOM。
问题是生命周期事件按以下顺序发生:
并且在呈现A时,甚至不可能将ref
变为B.
我想出了两个解决方案:
onKnownDims
作为支柱传递给B.让第一次渲染出现一些不正确的尺寸。当B
被挂载时,它会调用onKnownDims
来更改A的状态,从而立即进行第二次渲染。这种方式在DOM不正确时有一些短时间范围。尽管可以用一些黑客(display: none
等)来解决这个问题,但解决方案听起来并不健全。componentWillMount
电话this.render
中,将其返回ReactDOM.render
。即使它已被弃用,它也会返回对B的引用,该引用可用于从结果DOM中查找维度并将其设置为A的状态。然后将B的DOM从屏幕外父元素重新转换为A(这是有效的,因为React的渲染不关心root是否在DOM中重定位)。否则(通过使用回调)这种方法不起作用,因为componentWillMount
是同步的。有没有办法正确地做到这一点(即在第一次渲染和没有弃用功能的情况下)?