在setTimeout之后,React-Native推送到其他路由

时间:2016-11-05 04:47:28

标签: javascript reactjs react-native

我想知道是否可以使用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>
  );
};

3 个答案:

答案 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.

}