【问题标题】:Redirecting after successful action操作成功后重定向
【发布时间】:2019-01-27 13:06:06
【问题描述】:

我目前正在使用 react-navigation 包在 React Native 中进行身份验证项目。到目前为止一切顺利,我设置了 3 个导航器,一个用于加载,一个用于身份验证,一个用于应用程序。

我还使用 redux 进行了导航设置,因此我可以通过 prop 从任何组件访问它,这正是我想要做的。

但是,我有一个问题。我进行了一些研究,但似乎无法找出最好的方法。

我正在通过按下按钮attemptLogin() 发送一个动作,尝试登录然后执行它在锡上所说的操作,它尝试登录。

成功登录后,我使用 expo 将 access_token 存储在 SecureStore 中。

现在,成功登录后,我需要从当前堆栈导航到新堆栈。

最好的方法是什么,你能从 redux 动作中返回一个承诺吗?如果是这样,最好的方式是在组件内部,然后在组件内部执行类似

this.props.login(username, password).then(() => { this.props.navigation... });

或者你会在行动内部做吗?

【问题讨论】:

    标签: reactjs react-native redux react-navigation


    【解决方案1】:

    推荐方式如下:

    componentDidUpdate(prevProps) {
      if(this.props.loggedInSuccessfully && !prevProps.loggedInSuccessfully) {
        this.props.navigation.navigate....
      }
    }
    
    onLoginButtonPress = () => {
      const { username, password } = this.state;
      this.props.login(username, password);
    }
    

    成功登录后,在你的 reducer 中更新状态 loggedInSuccessfully 并在 componentDidUpdate 中实现逻辑。以我的拙见,这种方式对于维护您的代码的人来说是最清晰的

    【讨论】:

    • 太棒了,谢谢,我知道我要做什么,只是不知道最好的方法。我已经实现了这一点,一切都运行良好,非常感谢。
    • @tallent123:没问题!请记住将其标记为答案,以帮助偶然发现类似困惑的未来读者:)
    【解决方案2】:

    您还可以从 redux 操作或您想要的任何地方导航。

    阅读官方docs关于导航服务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-11
      • 2018-05-28
      • 1970-01-01
      • 2016-12-16
      • 1970-01-01
      • 2021-11-29
      • 2012-06-19
      相关资源
      最近更新 更多