reactjs - 有什么方法可以知道子组件是否已安装在 React 中
问题描述
我想知道是否有可能从this.props.children
某个特定的孩子是否被安装上找到?
我问这个的原因是我想创建一个包装器组件来处理某种异步渲染(特别是对于 react-native)并一个接一个地渲染子级。只是想知道如何使用简单的包装组件来完成。
任何帮助,将不胜感激。
编辑:
只是为了更多地描述预期的结果。假设我有一个类似的渲染方法
<View>
<Text>I'm a string</Text>
<View>
<Image />
<Image />
<Image />
<Image />
</View>
<View>
<View />
<View />
</View>
</View>
我想创建一个包装器,它可以异步渲染每个块并具有类似的东西
<ASyncRenderWrapper>
<Text>I'm a string</Text>
<View>
<Image />
<Image />
<Image />
<Image />
</View>
<View>
<View />
<View />
</View>
</ASyncRenderWrapper>
现在,我不想为每个孩子分配一个 ref this.props.children
,而是一个一个地渲染它们,但是要渲染下一个孩子,我必须知道前一个已经安装。
一些伪代码来说明我认为包装器组件应该是什么样子或做什么
state = {
childRenderList: Array.apply(null, Array(props.children.length)).map(() => false),
}
refCounter = 0
componentDidMount() {
this.startAsyncRender()
}
startAsyncRender = () => {
if (children[refCounter]) {
// Somehow figure out if the previous child has been mounted to know if this one can be allowed to mount
// Alternativly I guess I could just skip a render cycle with setTimeout
childRenderList = childRenderList[refCounter] = true;
this.setState({ childRenderList: childRenderList });
if (children[refCounter + 1]) {
this.startAsyncRender();
this.refCounter++
}
}
}
canRender = (index) => {
return childRenderList[index];
}
return (
{ children.map((Child, index) => canRender(index) && <Child />) }
)
解决方案
在您的子组件中:
state = {
domMounted: false //initial state
}
componentDidMount() {
this.setState({domMounted: true})
}
<Child ref={(childRef) => {this.childRef = childRef} />
在您的父组件中:
this.childRef.state.domMounted
推荐阅读
- git - 如何将最新提交压缩到 HEAD^2
- angular - 如何使用 Angular 5 安全地存储当前用户数据?
- android - 如何设置BottomNavigationView letterSpacing?
- ios - “[Root]”类型的值没有成员“commit”。我如何解码 JSON 根数组
- python - 如何编写可与线程或协程一起使用并在确定的时间内完成的 Python 代码?
- python - 为什么这里从基类调用子方法?
- android - 创建 UIAlert
- winapi - 如何通过 Win32 API 使用标准 Windows 图标之一?
- javascript - 表格中的jquery日历工作日
- c++ - 将 Char 写入 Arduino EEPROM