React native 如何添加选项卡并在应用程序的标题中显示按钮的名称?

React native 如何添加选项卡并在应用程序的标题中显示按钮的名称?,react-native,expo,react-navigation,React Native,Expo,React Navigation,如何在上部添加与下部按钮相关的子菜单或选项卡,并在应用程序的标题中显示下部按钮的名称 import React from 'react'; import { createStackNavigator } from 'react-navigation-stack'; import { createBottomTabNavigator } from 'react-navigation-tabs'; import { createAppContainer } from 'react-navigatio

如何在上部添加与下部按钮相关的子菜单或选项卡,并在应用程序的标题中显示下部按钮的名称

import React from 'react';
import { createStackNavigator } from 'react-navigation-stack';
import { createBottomTabNavigator } from 'react-navigation-tabs';
import { createAppContainer } from 'react-navigation';
import { MaterialIcons, MaterialCommunityIcons } from '@expo/vector-icons';

import Splash from '../screens/Splash';
import NewsListScreen from '../screens/NewsListScreen';
import NewsItemScreen from '../screens/NewsItemScreen';


const StackNavigator = createStackNavigator({
    //Splash: {screen: Splash},
    News: {
        screen: NewsListScreen
    },
    NewsItem: {
        screen: NewsItemScreen,
        navigationOptions: {
            headerTitle: 'News Item'
        }
    }
});

const BottomTabNavigator = createBottomTabNavigator({
    Home: {
        screen: StackNavigator,
        navigationOptions: {
            tabBarIcon: () => <MaterialIcons name="home" size={24} />
        }
    },
    News: {
        screen: StackNavigator,
        navigationOptions: {
            tabBarIcon: () => <MaterialCommunityIcons name="newspaper-variant-outline" size={24} />
        }
    }
})

export default createAppContainer(BottomTabNavigator);
从“React”导入React;
从“反应导航堆栈”导入{createStackNavigator};
从“反应导航选项卡”导入{CreateBoottomTabNavigator};
从“react navigation”导入{createAppContainer};
从“@expo/vector icons”导入{MaterialCommunityIcons,MaterialCommunityIcons};
从“../screens/Splash”导入飞溅;
从“../screens/NewsListScreen”导入NewsListScreen;
从“../screens/NewsItemScreen”导入NewsItemScreen;
const StackNavigator=createStackNavigator({
//飞溅:{screen:Splash},
新闻:{
屏幕:新闻列表屏幕
},
新闻项目:{
屏幕:NewsItemScreen,
导航选项:{
标题:“新闻项目”
}
}
});
const BottomTabNavigator=createBottomTabNavigator({
主页:{
屏幕:StackNavigator,
导航选项:{
tabBarIcon:()=>
}
},
新闻:{
屏幕:StackNavigator,
导航选项:{
tabBarIcon:()=>
}
}
})
导出默认createAppContainer(BottomTabNavigator);
我希望实现以下目标:

如您所见,底部按钮
[News]
在上部有三个参考按钮
[FEATURED],[RELEVANT],[SEARCH]
,除此之外,它还恢复底部按钮的名称,并将其添加到顶部按钮下方的应用程序标题中。

[EDITED] 您的
NewsListScreen
屏幕不只是一个选项卡栏组件,可以是这样的:

function NewsListScreen=(道具)=>(
新闻
)
函数TabBarComponent=createMaterialTopTabNavigator({
特色:,
相关:,
搜索:,
})

也就是说,如果可以的话,您应该将项目更新为react navigation v5,我认为这对用户更友好。

最终输出:

使用
react导航v5实现

import*as React from'React';
从“react native”导入{文本、视图、样式表、维度};
从“expo常量”导入常量;
进口{
导航容器,
使用导航状态,
}来自'@react导航/native';
从“@react navigation/bottom tabs”导入{createBottomTabNavigator};
从“@react navigation/material top tabs”导入{createMaterialTopTabNavigator};
const TopTab=createMaterialTopTabNavigator();
const BottomTab=createBottomTabNavigator();
/*
这里我使用MaterialTopTabNavigator而不是StackNavigator,
在这种情况下,基于UI快照的哪个选项更好。
*/
函数newstoptables(){
/*
如果要动态设置标题,则可以使用
使用NavigationState挂钩,但由于只有两个底部选项卡,因此
我使用的是硬编码值。
*/
const nav=useNavigationState((状态)=>state);
返回(
新闻
);
}
函数matchestoptab(){
返回(
比赛
);
}
函数MyBottomTabs({navigation}){
返回(
);
}
//[特色],[相关],[搜索]
导出默认函数App(){
返回(
);
}
//[特色],[相关],[搜索]
常量特征=()=>{
const nav=useNavigationState((状态)=>state);
返回(
作为特色的
);
};
相关常数=()=>{
const nav=useNavigationState((状态)=>state);
返回(
相关的
);
};
常量搜索=()=>{
const nav=useNavigationState((状态)=>state);
返回(
搜寻
);
};
const styles=StyleSheet.create({
标题栏:{
身高:50,
宽度:Math.round(Dimensions.get('window').width),
背景颜色:“白色”,
为内容辩护:“中心”,
borderBottomColor:“浅灰色”,
边界宽度:1,
paddingLeft:10,
},
标题:{
尺寸:20,
fontWeight:'粗体',
},
屏幕:{
弹性:1,
辩护内容:“中心”,
对齐项目:“中心”
}
});

工作示例:

您可以有一个应用程序(包含底部选项卡导航器),然后是一个子应用程序(包含顶部选项卡导航器)。每个子应用程序将是一个屏幕(组件),因此它是可能的。以前我已经用这种方式实现了设计,但我提出我的代码的方式是更有条理的。。。有没有使用我当前的问题代码结构的解决方案?您的示例非常基本,我不理解:(除非我能告诉你,我使用的是自今年我做这个项目以来最新的库,在同一个日期和月份。虽然代码替代方案与我已有的不同,但我使用的是另一个代码结构,因为我使用的是来自“expo”的
import{AppLoading};import{Provider}从“react redux”;
看看你编写代码的方式,你使用的是react navigation v4,而不是react navigation v5……但这并不重要。我将编辑我的答案来解释bettermi file package.json,所以我使用的是版本4代码,但它在v5中也同样有效,因为我已经安装了最新的附加组件,朋友