如何从外部重置特定的堆栈导航器?

时间:2019-08-29 08:00:10

标签: react-native react-navigation react-navigation-stack

我正在使用带有react-native的react-navigation制作应用程序。

我的应用程序的结构是

Main Tab
  - Tab 1 (Stack)
    - screen A
    - screen B
    - screen C
  - Tab 2 (Stack)
    - screen D
    - screen E
    - screen F

我想做的是在特定时间重置选项卡1(Stack Navigator),而不导航到选项卡1。

如果用户位于屏幕F中,我只想重置选项卡1(堆栈)而不让用户移动到选项卡1。

因此,我认为调度导航操作应在这些反应组件之外触发,例如resetHelper.js

但是我不知道如何在不浏览特定堆栈的情况下重置特定堆栈。

任何帮助将不胜感激。预先感谢!

1 个答案:

答案 0 :(得分:1)

通常,如果您位于特定的堆栈中,则可以通过this.props.navigation.reset()进行重置,但是由于要从另一个堆栈中重置一个堆栈,因此需要为{{1}使用NavigationService },需要重置。

阅读this help guide,了解如何创建StackNavigator

设置为NavigationService之后,将NavigationService编辑为:

NavigationService.js

然后从任何文件中的任何函数执行以下操作:

import { StackActions, NavigationActions } from 'react-navigation';

let _navigator;

function setTopLevelNavigator(navigatorRef) {
  _navigator = navigatorRef;
}

function reset(index = 0, actions) {
  _navigator.dispatch(
    StackActions.reset({
      index,
      actions
    })
  );
}

// add other navigation functions that you need and export them

export default {
  reset,
  setTopLevelNavigator,
};

了解更多about it here