react-native - 如何更改 TabNavigator 中每个屏幕的标题? - react 导航

标签 react-native react-navigation

我的堆栈导航器

<NavigationContainer>
    <Stack.Navigator>
       <Stack.Screen name="PageA" component={PageA} options={{title:'Page=A'}} />
       <Stack.Screen name="PageB" component={PageB} options={{title:'Page=B'}} />
       <Stack.Screen name="Menu" component={MenuTabNavigator} options={{title:'Menu'}} />
    </Stack.Navigator>
</NavigationContainer>

和我的标签页导航器

const MenuTabNavigator = () => {
  return (
    <Tab.Navigator>
      <Tab.Screen name="PageA" component={PageA} />
      <Tab.Screen name="PageB" component={PageB} />
      <Tab.Screen name="Menu" component={Menu} />
    </Tab.Navigator>
);};

我正在使用 Tab NavigatorStack Navigator

ScreenAScreen BMenu 屏幕在我的选项卡中。

如您所见,我将 MenuTabNavigator 传递给 StackNavigator 的 Menu 组件。

问题:

当我使用标签时,标题标题保持为“菜单”。

例如,当我触摸标签上的 PageB 时,我希望标题标题应该是“PageB”,但它仍然是“Menu”。

当我使用底部标签时,如何更改屏幕的标题标题?

最佳答案

您使用的方法是错误的。如果你这样做,你必须创建三个 StackNavigators 这样你就可以获得三个不同的标题。然后将它们包装在选项卡导航器中。但这是错误的使用方式。

import * as React from 'react';
import { View, Text } from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';

function HomeScreen({ navigation }) {
    navigation.setOptions({ title: 'Home' })
    return (
    <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
      <Text>Home!</Text>
    </View>
     );
 }

 function SettingsScreen({ navigation }) {
   navigation.setOptions({ title: 'Setting' })

 return (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
  <Text>Settings!</Text>
    </View>
  );
}

function Menu({ navigation }) {
  navigation.setOptions({ title: 'Menu' })
  return (
    <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
      <Text>Menu</Text>
    </View>
  );
}


const StackHome = () => {
  return (
    <Stack.Navigator>
      <Stack.Screen name="Home" component={HomeScreen} />
    </Stack.Navigator>
  );
};
const StackSetting = () => {
  return (
    <Stack.Navigator>
      <Stack.Screen name="Setting" component={SettingsScreen} />
    </Stack.Navigator>
  );
};
const StackMenu = () => {
  return (
    <Stack.Navigator>
      <Stack.Screen name="Menu" component={Menu} />
    </Stack.Navigator>
 );
};
const Tab = createBottomTabNavigator();
const Stack = createStackNavigator();

function App() {

  return (
    <NavigationContainer>
      <Tab.Navigator>
        <Tab.Screen name="PageA" component={StackHome} options={{ title: "Home" }} />
        <Tab.Screen name="PageB" component={StackSetting} options={{ title: "Settings" 
        }} 
   />
        <Tab.Screen name="Menu" component={StackMenu} options={{ title: "Menu" }} />
      </Tab.Navigator>
    </NavigationContainer>
  );
}

export default App;

关于react-native - 如何更改 TabNavigator 中每个屏幕的标题? - react 导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60382107/

相关文章:

android - 如何在 React Native 中从 Json 获取数据后在 View 上显示数据

react-native - 模块 `react-navigation-tabs` 在急速模块 map 中不存在

react-native - react 导航错误: Unable to resolve module `./vendor/index'

react-native - 从 v3 升级到 react-navigation v5

typescript - 使用 TypeScript 时如何在 React Native 中使用 createStackNavigator(React Navigation)?

css - React Native headerTitleStyle 不会居中

reactjs - 如何检查 firebase 中的嵌套文档和集合是否存在,如果不存在,如何在 native react 中创建

javascript - KeyboardAvoidingView 在包含一个 View 时折叠所有内部组件

javascript - 从 android 调用 Native 模块并将事件从此模块发送到 React Native

react-native - React Native Navigation const { navigate } = this.props.navigation;