开发者问题收集

从嵌套子屏幕访问父堆栈导航器的导航对象

2020-12-02
3292

我在我的 react-native 项目中使用 React Navigation v5。

我有一个嵌套的堆栈导航器。

父堆栈导航器 MyParentFlow 具有一个托管另一个堆栈导航器的屏幕组件:

const MyParentFlow = ({route, navigation}) => {

   const MyStack = createStackNavigator();

  return (
    <MyStack.Navigator
       initialRouteName={...}
       ...>
       {/*HERE is the nested children stack navigator*/}
       <MyStack.Screen
         name={FLOWS.MyChildrenFlow}
         component={MyChildrenFlow}
       />
       <MyStack.Screen .../>
       ...
    </MyStack.Navigator>
)
}

我的嵌套堆栈导航器 MyChildrenFlow

const MyChildrenFlow = ({route, navigation}) => {

   const MyStack = createStackNavigator();


  return (
    <MyStack.Navigator
       initialRouteName={...}
       ...>
       {/*HERE is a child screen in the nested navigator*/}
       <MyStack.Screen 
         name="MyChildScreen"
         component={MyChildScreen}
       />
       <MyStack.Screen .../>
       ...
    </MyStack.Navigator>
)
}

在嵌套堆栈导航器托管的子屏幕中:

const MyChildScreen =({navigation})=> {
    /* I need to set options for the header of the parent's navigation */
    navigation.setOptions({
    headerRight: () => (
      ...
      />
    ),
  });

}

在嵌套堆栈导航器托管的子屏幕中,我需要通过 navigation parent 导航器设置标题。我的上述代码不起作用,因为 navigation 对象是嵌套堆栈导航器的,而不是父级的。

我的问题是如何在嵌套子屏幕中访问父级导航器并为其设置导航选项?

2个回答

尝试一下

navigation.getParent().dispatch(
                    CommonActions.navigate({
                            name: 'screenName',
                            params: {},
                        }
                    ))
Kuti Gbolahan
2022-03-09

您可以使用 dangerouslyGetParent() 访问它

const parent = navigation.dangerouslyGetParent();

https://reactnavigation.org/docs/navigation-prop/#dangerouslygetparent

satya164
2020-12-02