javascript - 反应中的异步红化
问题描述
我有一个问题,我的一个组件在渲染时必须等待获取一些数据,但我找不到这样做的方法。
所以我有渲染方法
render() {
const getComponentProps = async () => {
return await this.props.Store.getComponentProperties(id);
};
componentProps = getComponentProps(id);
return <MyComponent
.
.
data={componentProps}/>;
}
问题是我的组件在获取数据之前正在渲染。我不能让整个渲染等待,我也尝试让 componentProps 成为一个状态,希望它一旦准备好就会重新渲染,但这也没有用。最后我在新的 react 版本中尝试了新的 Suspense/Lazy 功能,但也没有用。我正在获取的数据正在对我的数据库进行 REST 调用,我必须等待它。此外,渲染它映射到一个组件列表上,而不仅仅是一个组件,并且每个组件都必须获取其属性并加载它们。
关于如何在渲染中获取此异步数据的任何想法???
解决方案
为此,您必须使用您的state
. 安装组件后,您可以调用该函数setState
并等待获取数据。获取数据后,您的组件将使用正确的数据重新渲染:
class MyComponent extends Component {
constructor(props) {
super(props)
this.state = {
data: null
}
}
componentDidMount = async() => {
this.setState({ data: await this.props.Store.getComponentProperties(id) })
}
render() {
return <MyComponent2 data={this.state.data} />;
}
}
如果您不希望您的子组件接收空数据,您可以选择在未获取数据时不渲染它:
render() {
return this.state.data ? <MyComponent data={this.state.data} /> : <div/>
}
推荐阅读
- python - Flask - RuntimeError:未找到应用程序。在视图函数中工作或推送应用程序上下文
- ios - 为什么 Swift Firebase auth() 响应较晚?
- docker - Docker 容器网络 --format
- powerbi - 如何在按钮单击时从 mvc 应用程序将 power bi 报告导出为 pdf
- java - 我想使用 NCDC(国家气候数据中心)气候数据 API 根据邮政编码获取美国过去的最高和最低温度
- react-native - React Native 地图在旋转时不会改变宽度
- php - CI 框架中的 Zend_Barcode::render() - 如何在渲染图像前后添加文本和其他信息
- .net-core - 如何将 hibernate.cfg 移动到 appsettings.json
- python - Python 3:关于在函数中使用变量的理论问题
- java - 继承中的 ClassCastException - 为什么?