我正在获取数据,然后将其保存在移动设备上的sqlite文件中。调用此屏幕时,抓取代码开始由componentDidMount()
函数调用。提取结束后,会执行setState()
并因此调用componenDidUpdate()
函数(先将数据保存在sqlite中,然后再保存setState= 'isLoadingDataProgramadas: false'
),所以我希望应用程序过渡到'ActProgramadas'
屏幕使用React-Navigation V3。下面的解决方案有效,但警告我:
警告:无法在现有状态(例如在 '渲染')。渲染方法应该是props和 状态。
我该如何解决?
componentDidMount() {
this.doFetch();
}
componentDidUpdate(){
this.openBD();
this.insertSQLITE();
}
componentWillUnmount() {
this.closeDatabase();
}
render() {
if(this.state.isLoadingDataProgramadas)
return (
<View style={stylesLoading.container}>
<View>
<ActivityIndicator size="large" color="lightblue"/>
</View>
<View>
<Text style={stylesLoading.texto}>
Descargando datos...
</Text>
</View>
</View>
);
else
return(
<View>
{this.props.navigation.navigate('ActProgramadas')}
</View>
);
}
答案 0 :(得分:0)
if else
语句中的错字。尝试一下:
render() {
if(this.state.isLoadingDataProgramadas) {
return (
<View style={stylesLoading.container}>
<View>
<ActivityIndicator size="large" color="lightblue"/>
</View>
<View>
<Text style={stylesLoading.texto}>
Descargando datos...
</Text>
</View>
</View>
);
} else {
return(
<View>
{() => this.props.navigation.navigate('ActProgramadas')}
</View>
);
}
}
答案 1 :(得分:0)
可能是navigation.navigate在内部使用了setState函数。我的建议是制作一个将导航封装到这样的setTimeout函数中的函数
navigate = () => {
const { navigation } = this.props
setTimeout(() => {
navigation.navigate('ActProgramadas')
}, 1000);
}
...
<View>
{this.navigate()}
</View>