ajax - 子组件中的 Await 调用会阻塞父渲染吗?
问题描述
我想知道我是否有这样的组件
class Parent extends React.Component {
render() {
return (
<div>
<h1>Hello</h1>
<Child />
</div>
);
}
}
class Child extends React.Component {
constructor(props) {
super(props);
this.state = {value: ''};
}
async componentDidMount() {
this.setState({value:await ajaxCallToServer() })
}
render() {
return (
<div>
<h1>Child {this.state.value}</h1>
</div>
);
}
}
Child 基本上会阻止 Parent 渲染,直到 Child 完成它的 ajax 请求?
解决方案
不,子组件不会阻止父组件渲染。
一开始,Parent
和Child
组件都被渲染了,但是Child
组件被渲染为 state value: ""
。
并且当 ajax/ 网络请求成功完成时,Child
组件状态被更新,Child
组件被重新渲染并更新状态。
您可以Child
使用以下代码更新组件并查看结果。
class Child extends React.Component {
constructor(props) {
super(props);
this.state = { value: "" };
}
fakePromise = () => {
return new Promise(resolve => {
setTimeout(() => resolve("Foo"), 10000);
});
};
async componentDidMount() {
this.setState({ value: await this.fakePromise() });
}
render() {
return (
<div>
<h1>Child {this.state.value}</h1>
</div>
);
}
}
推荐阅读
- typescript - 为什么接口不能分配给Record
? - amibroker - 在 amibroker afl 代码中存储和访问变量/值
- flutter - 根据自定义对象的变量的布尔值返回对象列表
- spring-boot - 我们可以在 XML 中有 GraphQL 响应吗
- android - 使用 Android Studio 中的 Google Drive API 从驱动器下载文件以上传到另一个驱动器
- android-camerax - 捕捉自动连续对焦开始和结束事件
- python - 在anaconda env中运行脚本时出现biopython ModuleNotFoundError
- python - 在 3d 曲面中绘制积分的解 (ERROR)
- svg - SVG不透明度图像在淡入淡出后不断弹出
- c# - 调试反射 TypeLoadExceptions