【发布时间】:2021-04-24 13:48:59
【问题描述】:
我有一个默认呈现null 的React 类组件,以及调用activate() 函数之后的一些子组件。大致是这样的:
class MyComponent extends React.Component {
...
activate() {
this.setState({showComponent: true})
}
...
render() {
if (this.state.showComponent) {
return <Child />
} else {
return null
}
}
}
我有一个外部 JavaScript 脚本,我在其中与 MyComponent 交互(调用激活函数)。
为了简短起见,我的问题是,在此外部 JS 脚本中调用 activate() 并尝试访问 <Child /> 组件中的 HTMLElements 之后(使用 document.getElementById)我得到空指针作为 <Child />组件稍后异步渲染。
有没有办法调整MyComponent 中的activate() 函数以“等待”<Child /> 中的所有子代挂载?
我已经尝试利用 setState 的异步特性并尝试使用 async activate() 和 await this.setState({showComponent: true}) 但这并没有改变渲染顺序。
所以简而言之,有没有办法在执行 setState 更新后等待子渲染。我想这有点特殊,因为它涉及条件渲染,MyComponent 最初什么也不渲染。
对任何想法都很满意!:)
【问题讨论】:
-
我建议改用
useEffect。
标签: javascript reactjs asynchronous async-await