从屏幕B导航到A时防止卸载

时间:2019-04-11 16:27:46

标签: reactjs react-native react-navigation

所以我的问题是:当使用React Navigation时,当用户导航到Screen A时,会挂载A。当用户转到屏幕B时,B已安装,A保持安装。当用户导航回A时,B会卸载,而A会保持安装状态。

这是预期的according to the docs

我希望B保持坐骑。这可能吗?如果是,那怎么办?

const ThisStack = createStackNavigator(
  {
    A: {
      screen: ScreenA,
      navigationOptions: ({ navigation }) => ({
        headerLeft: <HamburgerMenuButton navigation={navigation} />,
      }),
    },
    B: {
      screen: ScreenB,
    },
  },
  {
    initialRouteName: 'FOO',
    headerMode: 'screen',
    defaultNavigationOptions: navigationOptions,
  }
);

为什么要挂载它?

好吧,我必须使用一个名为Reactive的软件包。 Reactive具有一个名为<ReactiveComponent />的基本组件,该组件在卸载时会调用一个removeComponent函数,我试图阻止该函数的发生。

似乎Reactive并不是为了在不同屏幕上使用而创建的,但是要实现我要完成的任务,我需要以这种方式使用它。

1 个答案:

答案 0 :(得分:0)

这很容易。您当前正在使用StackNavigation,它的工作原理是将屏幕彼此叠置并在不再需要它们时将其卸载。另一方面,如果您只想在不同屏幕之间导航而不卸载它们,则可以选择许多其他导航选项。例如TabNavigationDrawerNavigation SwitchNavigator等。或者,您甚至可以使用navigator构建自己的react-navigation

在这里,我使用switchNavigator,它通常用于身份验证流程,即,将用户登录或注销。

const ThisStack = createSwitchNavigator(
  {
    A: {
      screen: ScreenA,
      navigationOptions: ({ navigation }) => ({
        headerLeft: <HamburgerMenuButton navigation={navigation} />,
      }),
    },
    B: {
      screen: ScreenB,
    },
  },
  {
    initialRouteName: 'FOO',
    headerMode: 'screen',
    defaultNavigationOptions: navigationOptions,
  }
);

我所做的只是使用createSwitchNavigator而不是createStackNavigator。让我知道这是否适合您