【发布时间】:2025-11-25 12:40:01
【问题描述】:
我正在开发移动应用程序,但遇到了不知道如何解决的问题。
创建屏幕后,我必须从 API 加载一些数据。我在componentDidMount 方法中执行此操作,即async,因此我可以使用await 关键字。之后,我设置状态,因此 Loader 组件(只是显示文本的模式)被隐藏,屏幕使用来自 API 的数据重新呈现。这在 Android 设备上运行良好。但是在 iOS (iPhone X) 上运行此代码不起作用。 SomeScreen.js 和 Loader.js 的渲染方法被调用,Loader.js 渲染方法返回 null(用控制台检查)但 iPhone 上的视图没有更新。即使它的渲染方法返回 null,加载器模式仍然存在。我做错什么了吗?致电this.foceUpdate() 也无济于事。
SomeScreen.js
import React, {Component} from 'react';
import Loader from 'components/Loader/Loader';
export default class SomeScreen extends Component {
constructor(props) {
super(props);
this.state = {
loading: true,
data: []
};
}
async componentDidMount() {
const data = await this.loadData();
this.setState({loading: false, data: data})
}
async loadData() {
//fetch and return data from API
}
render() {
return (
<SafeAreaView style={{flex: 1}}>
<Loader loading={this.state.loading}/>
//other rendering...
</SafeAreaView>
);
}
}
Loader.js
import React, {Component} from 'react';
import {Modal, Text, View} from 'react-native';
export default class Loader extends Component {
static defaultProps = {
loading: false
};
render() {
if (this.props.loading !== true) {
return null;
}
return(
<Modal
transparent={false}
animationType={'none'}
visible={true}>
<View style={{backgroundColor: "white", flex: 1, justifyContent: "center"}}>
<Text>Loading data...</Text>
</View>
</Modal>
)
}
}
【问题讨论】:
标签: ios reactjs react-native render setstate