2

我有一个带有注册和登录流程的应用程序。当与 Redux 一起使用时,我遇到了嵌套堆栈导航器的问题。

React-导航结构

  • RootNavigator(堆栈导航器)
    • 注册(堆栈导航器)
    • 登录(堆栈导航器)

应用程序设置

  • 反应:16.0.0-alpha.6,
  • 反应原生:0.44.2,
  • 反应导航:^1.0.0-beta.11,
  • 反应还原:^5.0.6,

我的问题是,当从“登陆”ReactNavigation 触发“注册”(或“登录”)时,为嵌套(内部)堆栈导航器实例化两个初始屏幕。请参阅下面的屏幕截图。

这是着陆状态(正确) 在此处输入图像描述

但是当按下“注册”时,就会发生这种情况。 在此处输入图像描述

我最终得到了两条“注册”路线(路线名称称为“PersonalRego”)。如屏幕截图所示,'Step1' 是重复的,因为我期望在 routes 数组中只有一个 'Step1' 实例。但是这两个“Step1”的键是不同的。一个以“Init-”开头,另一个没有。

因此,向后导航(按顶部的“关闭”按钮)不会按预期取消注册。而是再次显示注册的“Step1”。

除了这个问题,反应导航的一切对我来说似乎都很好。在 ReactNative + ReactNavigation + Redux 应用程序中配置嵌套的 StackNavigators 时,我需要做些什么特别的事情吗?

我对此有点困惑。欢迎任何意见。

Ps : StackNavigator 代码(只有一层深嵌套的 StackNavigator)

// LandingNav.js

const routes = {
    Landing: { screen: Landing },
    PersonalRego: { screen: PersonalRego },
    Auth: { screen: Auth },
};

const config = {
    headerMode: 'none',
    initialRoute: 'Landing,
};
const Root = StackNavigator(routes, config);   

.

// PersonalRegoNav.js
const routes = {
    Step1: { screen: Step1 },
    Step2: { screen: Step2 },
    Step3: { screen: Step3 },
};

const config = {
    headerMode: 'none,
    initialRoute: 'Step1',
};

const Root = StackNavigator(routes, config);

.

// AuthNav.js

const routes = {
    Login: { screen: LoginContainer },
    ForgotUsername: { screen: ForgotUsername },
    ForgotPassword: { screen: ForgotPassword },
};

const config = {
    headerMode: 'none',
    initialRoute: 'Login',
};
const Root = StackNavigator(routes, config);
4

2 回答 2

1

为了后代的缘故回答我自己的问题。

按下注册时,我将导航到“Step1”而不是“PersonalRego”。“PersonalRego”已经将“Step1”作为初始路由,因此如果您导航到“Step1”,它会推送另一个实例。

因此,在按下注册按钮时调用“PersonalRego”路线可以解决问题。

于 2017-09-26T01:06:43.613 回答
0

请参考下面的链接,由我的朋友完美解决和解释-> https://medium.com/@kakul.gupta009/custom-drawer-using-react-navigation-80abbab489f7

于 2017-09-25T12:37:10.707 回答