我有一个组件,它在动态网格中排列元素,如下所示:
class GridComponent extends React.Component {
render() {
return <div>
{items.map(function(item){
return <ItemComponent someData={item}/>;
})}
</div>
}
}
现在我想基于某种算法定位ItemComponents
,这需要单独的ItemComponents
尺寸。
所以我想,我需要:
ItemComponents
ItemComponents
的尺寸(仅在渲染后修复)ItemComponents
所以我的问题是如何做到这一点,或者更具体:
ItemComponents
后如何执行某些代码?ItemComponents
的尺寸?GridComponent
位置重新呈现ItemComponents
,还是应该直接设置ItemComponents
的位置?答案 0 :(得分:7)
这是一个非常酷的想法,你可以使用内部状态和一些React生命周期方法完全做到这一点。回答你的每个问题:
componentDidMount
将在每个子节点的所有构造函数和componentDidMount
之后调用父节点,因此这里是调用某些可能依赖于您的状态的函数的好地方ItemComponent
的根组件的屏幕宽度和高度,因此在componentDidMount
的{{1}}上,您可以设置ItemComponent
并查找DOM元素的宽度和高度ref
都可以有一个名为ItemComponent
的道具,在父项找到放置位置之前它是假的。将所有这些放在一起,因为您的算法可能需要所有维度都可以使用,您可能希望在父级中创建一个回调,让我们称之为initialized
调用每个setItemDimensions(id, width, height)
的{{1}}。您应该保留所有已初始化的componentDidMount
的地图,并且每次调用ItemComponent
时,请检查是否有任何剩余(可能会使用所有空值初始化地图并假设它为&#39; s&#34;准备就绪&#34;当没有空值时。)
一旦最后ItemComponent
消失,您可以运行算法,找出位置,并使用setItemDimensions
(或null
将ItemComponent
呈现在正确的位置1}})。
让我们看看它是否有效!