如何设置父级的 NavigationOptions?

Posted

技术标签:

【中文标题】如何设置父级的 NavigationOptions?【英文标题】:How to set NavigationOptions of a parent? 【发布时间】:2019-04-18 18:08:07 【问题描述】:

我在我的应用程序中嵌套了导航器。我希望我的标题栏设置在导航的根目录上,这样我的应用程序中的所有屏幕都会有一个相互的标题栏。

我的 index.js 是:

const StackOpportunityNavigator = createStackNavigator(

  MainOpportunity: OpportunityScreen,
  ClientScreen: ClientScreen,
  BusinessMapLocation: BusinessMapLocation,
  LoginScreen: LoginScreen
,

  initialRouteName: 'MainOpportunity',
  headerMode: 'none',
  transitionConfig: () => fromLeft(600),    
 
);

const DrawerNavigationOptions = createDrawerNavigator(

   OpportunityStack:  screen: StackOpportunityNavigator ,
   History: HistoryScreen,
   MyChances: MyChancesScreen,
   Info: InfoScreen
,

  contentComponent: (props) => <SideBar ...props />,
  drawerPosition: 'right',
  transitionConfig: () => fromLeft(600),
 
);

const LoginNavigator = createStackNavigator(

   LoadingScreen: LoadingScreen,
   LoginScreen: LoginScreen,
   DrawerNavigator: DrawerNavigationOptions
,

 transitionConfig: () => fromLeft(600),
 headerMode: 'screen',
 navigationOptions: 
   headerStyle: 
     backgroundColor: Colors.primary
   ,
   headerTintColor: '#fff',
   headerTitleStyle: 
     fontWeight: 'normal',
     fontSize: 18
   
  
 
);

export default LoginNavigator;

在我的应用程序的每个屏幕中,我都有以下代码:

static navigationOptions = 
      header: <HeaderBar title='currentScreenTitle' />
  ;

但是,它可以在“LoginScreen”屏幕和“LoginNavigator”的所有其他屏幕上工作,但不能在“历史”等任何其他屏幕上工作。

如果我的导航标题栏位于最根导航器中,我如何仍能从“历史记录”等其他屏幕控制导航选项并设置标题?

希望你能理解我的问题。 真心希望能尽快得到您的答复。 谢谢大家!

【问题讨论】:

试试this.props.navigation.getParent.setOptions: reactnavigation.org/docs/navigation-prop/#getparent 【参考方案1】:

据我了解,无法从嵌套屏幕中访问父导航器。

文档指出:“You can only modify navigation options for a navigator from one of its screen components. This applies equally to navigators that are nested as screens。”

这不是很方便,但我认为创建自己的组件是实现此目的的唯一方法。不过,有一个有用的库可以让您更轻松地创建标题组件。 React Native Elements

【讨论】:

【参考方案2】:

我遇到了同样的问题,我在 navigationOptions 中将 header 设为 null 并将我的 header 组件添加到屏幕中作为常规组件并执行所有逻辑,这不是最佳实践,而是一种解决方法:)

【讨论】:

是的,我也这样做了......但我真的很想学习编码的最佳实践,我想我只是想念一些简单的解决方案

以上是关于如何设置父级的 NavigationOptions?的主要内容,如果未能解决你的问题,请参考以下文章

如何从UserControl访问父级的DataContext

有两个div,一个父级,一个子级,父级有滚动条,样式如何写才能让子级的div固定在顶部,不随滚动条

如何在鼠标位置打开具有 Windows 窗体父级的 WPF 窗口?

如何为不是直接父级而是父级父级的嵌套元素设置百分比宽度?

使用 Apollo 时如何设置 navigationOptions?

CSS - 将父级的高度设置为 0,但子级 div 仍然显示