我有一个组件,它在动态网格中排列元素,如下所示:
class GridComponent extends React.Component {
render() {
return <div>
{items.map(function(item){
return <ItemComponent someData={item}/>;
})}
</div>
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想ItemComponents基于一些算法定位,这需要单独的ItemComponents维度.
所以我想,我需要:
ItemComponentsItemComponents(仅在渲染后修复)ItemComponents根据我的算法重新定位所以我的问题是如何,或更具体:
ItemComponents在渲染所有代码时执行某些代码?ItemComponents从GridComponent中获取from 的尺寸?GridComponent用计算的ItemComponents位置重新渲染,还是应该ItemComponents直接设置位置?这是一个非常酷的想法,你可以使用内部状态和一些React生命周期方法完全做到这一点.回答你的每个问题:
componentDidMount在所有构造函数和componentDidMount每个子元素之后,函数将在父元素上调用,因此这里是一个调用某些函数的好地方,可能依赖于你的状态ItemComponent小号因此上componentDidMount在ItemComponent,可以设置一个ref,并找到的DOM元素的宽度和高度ItemComponent可以拥有一个名为initializedfalse 的道具,直到父级找到放置位置.将所有这些放在一起,因为你的算法可能需要所有维度才能工作,你可能想要在你的父项中创建一个回调,让我们调用它setItemDimensions(id, width, height),componentDidMount每个都调用它ItemComponent.您应该保留所有已初始化的ItemComponents 的映射,并且每次setItemDimensions调用时,检查是否有任何剩余(可能使用所有空值初始化映射并假设在没有空值时它已"准备好").
一旦最后一个null消失,您可以运行算法,找出位置,ItemComponent并使用initialized={true}(或仅仅initialized)将s 渲染到正确的位置.
让我们看看它是否有效!
| 归档时间: |
|
| 查看次数: |
4758 次 |
| 最近记录: |