反应导航(V2 / V3):如何在屏幕上的NavigationOptions中访问navigation.state.index

J·海丝特

我正在构建一个React Native应用程序,对于我的导航,我使用React Navigation(V3)。对于我的UI元素,我使用React Native Elements。

我有一个屏幕,可以在多个导航器中重复使用。有时它是堆栈的根,有时是堆栈的。我想根据其在堆栈中的位置以编程headerLeft方式向该屏幕添加元素navigationOptions,因为如果屏幕位于堆栈的根部,则我希望显示默认的后退按钮,或显示汉堡菜单图标(因为堆栈嵌套在抽屉中)。

所以我尝试了以下方法:

export class ScannerScreen extends Component {
  static navigationOptions = ({ navigation }) => ({
    headerLeft:
      navigation.state.index > 0 ? (
        undefined 
      ) : (
        <Icon type="ionicon" name="ios-menu" onPress={navigation.toggleDrawer} />
      ),
    title: strings.scannerTitle
  });
// ...

问题是,这是行不通的navigation.state.indexundefined在这里。如何用React导航做到这一点?

编辑:根据要求,我添加了console.log(navigation)(通过<Icon />s onPress的屏幕截图在此处输入图片说明

J·海丝特

我找到了hacky解决方案,没关系,但我也不太喜欢它:

const stackConfig: StackNavigatorConfig = {
  cardStyle: styles.card,
  navigationOptions: {
    headerBackTitleStyle: styles.headerBackTitle,
    headerStyle: styles.header,
    headerTintColor: "black"
  }
};

const HomeStack = createStackNavigator(
  { HomeScreen, RestaurantDetailScreen, MenuScreen, ScannerScreen },
  {
    ...stackConfig,
    initialRouteName: "HomeScreen",
    navigationOptions: ({ navigation }) => ({
      headerLeft:
        parseFloat(navigation.state.key.slice(-1)) > 1 ? (
          undefined
        ) : (
          <Icon
            containerStyle={styles.leftIcon}
            type="ionicon"
            name={getIconName("menu")}
            onPress={navigation.toggleDrawer}
          />
        ),
      ...stackConfig.navigationOptions
    })
  }
);

这样,它将自动为整个堆栈设置它。您也可以在相应屏幕的各个导航选项中执行此操作。但这只能起作用,因为为屏幕自动分配的键包含它的索引。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

反应导航-如何在标题NavigationOptions中使用this.state?

wix反应本机导航v2 | 如何从侧抽屉组件将新屏幕推送到当前屏幕

Android Google Maps v2导航

反应导航 - this.props.navigation.state 未定义

反应本机-使用PayPal v2 /订单付款

WP API V2 的 Nuxt / Vue 导航菜单问题

向Docusaurus v2导航栏添加新标签

React Navigation(V2):如何在Drawer Navigator中设置图标和堆栈导航器的标签?

React Native Navigation v2 sideMenu无法导航到屏幕

在navigationOptions中反应原生的2个屏幕之间的导航

Youtube API v2在v3上更新

如何使用GraphSON v2而不是v3?

如何在Amazon PHP SDK v3中使用v2身份验证标头?

如何在Slim v3中将Slim v2挂钩实现为中间件

在反应中访问 this.state 中的值

反应过渡组。从 .v1 迁移到 .v2 后转换不起作用

导航在Drawer Navigation V3中的自定义抽屉组件中不起作用(反应本机)

仅向新用户显示屏幕反应导航 v3

如何在react-native-navigation v2中为所有屏幕添加固定的标题?

从v1迁移到本机导航v2之后,始终不变

React Navigation v3与React Native Navigation v2

在 Angular(v2 onwards) 反应形式 Form Array 中获取无效控件

如何将`tf.contrib.lookup.index_table_from_file`转换为Tensorflow v2

如何在Cocos2D V3上的CCScene中检测触摸?

如何在Slim v3中的中间件类中访问$ container?

反应导航:使用this.props.navigation.state.params接收“未定义”

使用导航抽屉在片段中创建Google Maps v2

如何在YouTube V3 API中为视频指定访问控制参数

如何在功能中访问react-router v3 prop?