导航多个屏幕后,React导航无法导航到上一个屏幕

时间:2018-07-23 09:40:33

标签: react-native react-navigation

场景:

  1. 导航:屏幕“ StoreCategories”->屏幕“ QRScanner”
  2. 在“ QRScanner”屏幕上按回车键,可以完美地运行到“ StoreCategories”屏幕
  3. 导航:屏幕“ QRScanner”->屏幕“选项”和
  4. 导航:再次显示“选项”->屏幕“ QRScanner”
  5. 在屏幕“ QRScanner”上单击时再次单击,再次重定向到屏幕“ StoreCategories”

不重定向到其先前的屏幕“选项”。

一切都发生在反应导航中的默认后退功能上,我没有使用任何自定义功能进行后退功能。

我该如何解决它并导航到重定向发生之前的位置,而不是在react-navigation(V2)中已经缓存的屏幕上?

const StackNavigator = defaultRoute =>
createStackNavigator(
{
  CustomerLogin: {
    screen: CustomerLogins
  },
  MerchantLogin: {
    screen: MerchantLogin
  },
  Profile: {
    screen: Profile
  },
  OtpVerification: {
    screen: OtpVerification
  },
  StoreOffers: {
    screen: StoreOffers
  },
  StoreCategories: {
    screen: StoreCategories
  },
  QRScanner: {
    screen: QRScanner
  },
  MerchantHome: {
    screen: MerchantHome
  },
  CustomerHome: {
    screen: CustomerHome
  },
  ThankYou: {
    screen: ThankYou
  },
  Detail: {
    screen: Detail
  },
  Options: {
    screen: Options
  },
  PayOnline: {
    screen: PayOnline
  },
  PayCash: {
    screen: PayCash
  },
  PayTm: {
    screen: PayTm
  },
  Token: {
    screen: Token
  },
  AddDiscount: {
    screen: AddDiscount
  },
  CustomerHistory: {
    screen: CustomerHistory
  },
  Webview: {
    screen: Webview
  },
  Direction: {
    screen: Direction
  }
},
{
  initialRouteName: defaultRoute
}
);

2 个答案:

答案 0 :(得分:1)

当前React-Navigation的导航功能的工作方式与以前的工作方式有些不同。当前,如果您导航到屏幕堆栈中已经存在的屏幕,则系统将返回到该屏幕(删除当前屏幕之间的其他屏幕,该屏幕将被删除),而不是简单地将新屏幕添加到堆栈中。

如果要使用旧的系统样式,则可以使用代替导航。这只会添加到堆栈中,而不是返回到最后一个(如果存在于堆栈中)。

所以不要使用

const {navigate} = navigation;
navigate(nextScreen, params);

您使用

const {push} = navigation;
push(nextScreen, params);

答案 1 :(得分:0)

如果要导航到后退屏幕,可以使用以下代码:

this.props.navigation.goBack()

通过导航到Main,它将重定向到Main的初始路由,并且似乎是A