我有一个 StackNavigator 嵌套在 TabNavigator 嵌套在另一个 StackNavigator 中的场景。

const TabOneStack = StackNavigator({
  ScreenA: { screen: ScreenA },
  ScreenB: { screen: ScreenB }
});

const MainTabs = TabNavigator({
  TabOne: { screen: TabOneStack },
  TabTwo: { screen: TabTwoStack }
});

const Root = StackNavigator({
  HomeScreen: { screen: HomeScreen },
  MainTabs: { screen: MainTabs }
});

一切正常,但我无法弄清楚如何导航,例如从 ScreenA 返回到根目录 StackNavigator 的主屏幕。
HomeScreen 之后,用户直接导航到 ScreenA。
ScreenA 标题中的后退按钮工作正常,可以让我回到主页,但需要一种方法来让按钮让我回到主页。
不幸的是,this.props.navigation.goBack() 不起作用。

我也试过
const backAction = NavigationActions.reset({
  index: 0,
  key: null,
  actions: [
    NavigationActions.navigate({ routeName: 'HomeScreen'})
  ]
});
this.props.navigation.dispatch(backAction));

但我得到:

没有为键 HomeScreen 定义路由。必须是以下之一:'ScreenA'、'ScreenB'。

这样做的正确方法是什么?

最佳答案

要从子 StackNavigator 遍历回父 StackNavigator ,请执行以下操作:

class ScreenA extends Component {
    render() {
        return (<Button onPress={() => {
            this.props.navigation.dispatch({type: 'Navigation/BACK'});
        }} title='ScreenA. back to Home' />);
    }
}
this.props.navigation.dispatch()'Navigation/BACK' 的作用与最顶部的后退按钮完全相同。
它与 goBack() 的区别在于应用父子堆栈遍历,而 goBack() 则没有。

结果:

reactjs - 导航到父堆栈的父级-LMLPHP

请注意@Jigar 的回答也是正确的,这只是我的速记符号。关键是将 null 参数传递给 goBack() 。没有它就行不通。

this.props.navigation.goBack(null);

关于reactjs - 导航到父堆栈的父级,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47596977/

10-10 21:05