我的应用程序的设置几乎与文档中的以下代码段相同:https://reactnavigation.org/docs/screen-options-resolution/#setting-parent-screen-options-based-on-child-navigators-state:
const FeedStack = createStackNavigator();
function FeedStackScreen() {
return (
<FeedStack.Navigator>
<FeedStack.Screen name="Feed" component={FeedScreen} />
{/* other screens */}
</FeedStack.Navigator>
);
}
const ProfileStack = createStackNavigator();
function ProfileStackScreen() {
return (
<ProfileStack.Navigator>
<ProfileStack.Screen name="Profile" component={ProfileScreen} />
{/* other screens */}
</ProfileStack.Navigator>
);
}
const Tab = createBottomTabNavigator();
function HomeTabs() {
return (
<Tab.Navigator>
<Tab.Screen name="Feed" component={FeedStackScreen} />
<Tab.Screen name="Profile" component={ProfileStackScreen} />
</Tab.Navigator>
);
}
const RootStack = createStackNavigator();
export default function App() {
return (
<NavigationContainer>
<RootStack.Navigator>
<RootStack.Screen name="Home" component={HomeTabs} />
<RootStack.Screen name="Settings" component={SettingsScreen} />
</RootStack.Navigator>
</NavigationContainer>
);
}
不同之处在于我的FeedStackScreen
和ProfileStackScreen
版本中有大约4或5个屏幕,每个屏幕都有自己的options
属性,用于设置headerLeft
的值,headerRight
和/或headerTitle
。
文档说,父级导航器只能在其直接子级中看到设置。因此,RootStack
可以读取HomeTabs
的屏幕选项,而不能读取FeedStackScreen
和ProfileStackScreen
的屏幕选项。
我尝试在我的HomeTabs
版本上使用此代码,
React.useLayoutEffect(() => {
navigation.setOptions({ headerTitle: getHeaderTitle(route) });
}, [navigation, route])
但是route
道具只给我起了Tab.Screen
的名字...而且至少我需要该标签内的Stack.Screen
的名字。
关于如何获得headerLeft
可以识别的headerRight
中设置的headerTitle
,FeedStackScreen
和RootStack
选项的任何建议?