使用Redux成功登录后如何导航到应用程序堆栈?

时间:2019-11-20 02:38:42

标签: react-native

我有一个切换导航器

   // Add switch navigator
    export default createAppContainer(
        Config.Login.RequiredLogin
          ? createSwitchNavigator(
              {
                AuthLoading: AuthLoadingScreen, 
                App: DrawerNavigator, // App Stack
                Auth: AuthNavigator, // Auth Stack
              },
              {
                initialRouteName: "AuthLoading", 
              }
            )
          : DrawerNavigator
    );

在首次启动应用程序期间,它将显示“身份验证”堆栈的登录屏幕。按下登录按钮后,它将通过获取来调用登录API并更新Redux用户。当有用户时,我应该如何导航到“ App”堆栈?

我试图将其放置在getDerivedStateFromProps中,但它给出了错误

  

TypeError:undefined不是对象(正在评估   'this.props.navigation')

  static getDerivedStateFromProps(nextProps, prevState) {
    if (prevState.userToken !== nextProps.userToken) {
      this.props.navigation.navigate("App");

      return {
        userToken: nextProps.userToken
      };
    }

    // Return null to indicate no change to state.
    return null;
  }

我应该在render()中放置一个标志,然后导航到那里吗?抱歉,我是React Native的新手。

  render() {
    const { userToken } = this.props
    if(userToken){
      this.props.navigation.navigate("App");
    }


    ... other code for rendering login view
  }

getDerivedStateFromProps的主要目的是什么?

2 个答案:

答案 0 :(得分:1)

getDerivedStateFromProps应该用于更新有关newprops的状态。它不应用于重定向目的。您应该使用componentdidupdate

尝试一下

componentDidUpdate() {
  const { userToken } = this.props
    if(userToken){
      this.props.navigation.navigate("App");
    }
}

答案 1 :(得分:0)

您必须按照文档navigating-without-navigation-prop

中的说明实施NavigationService