我想知道是否可以使用setTimeout函数推送到另一个路由。我有一个组件是一个加载页面,如果在加载阶段完成后我想要做什么我在屏幕上显示一条消息文本,但是在1秒后我自动推送到另一条路线。
我正在使用react-native-router-flux。
const pushRoute = () => setTimeout(() => Actions.home(), 1000);
const PhotoPageOnSave = ({ photoState: { message, loading, error } }) => {
if (loading) {
return (
<Container>
<View style={styles.root}>
<Spinner size="large" color="white" />
</View>
</Container>
);
}
return (
<Container>
<View style={[styles.root, error ? { backgroundColor: '#C70018' } : null]}>
<View>
<Text style={styles.textStyle}>{message}</Text>
</View>
</View>
{() => pushRoute()}
</Container>
);
};
答案 0 :(得分:1)
我认为这是render()
函数的一部分?
你可以这样做,通常不会在render()
函数中完成。通常,这种行为是为componentDidMount()
或componentWillReceiveProps()
类似的东西:
componentWillReceiveProps(nextProps){
if(!nextProps.loading){
pushRoute();
}
}
答案 1 :(得分:1)
你要做的事情肯定是可能的。如果你替换......会发生什么?
{() => pushRoute()}
...与
{setTimeout(() => Actions.home(), 1000)}
或
{this.pushRoute}
???
答案 2 :(得分:1)
你可以在pushRoute函数中写一个承诺
pushRoute(dly) {
return new Promise(function(resolve, reject) {
setTimeout(() => {
resolve()
}, dly);
})
}
并调用另一个必须是异步的函数,例如onPress函数
async onPress(){
var result = await = this.pushRoute(1000);
// and now you are free to call navigator.psuh here after 1000ms.
}