출처 : stackoverflow.com/questions/60363195/react-navigation-header-title-in-nested-tab-navigator
React Navigation header title in nested tab navigator
I have a Tab Navigator inside a Stack Navigator and I want the header title to be dynamically configured as the title of the tab selected. Like there's 3 tabs: Home, Profile, Add Item and I want the
stackoverflow.com
[원글]
I have a Tab Navigator inside a Stack Navigator and I want the header title to be dynamically configured as the title of the tab selected. Like there's 3 tabs: Home, Profile, Add Item and I want the header title to be "Home" when in the home tab, "Profile" when in the profile tab.
I tried using onStateChange on the root navigator and setOptions on the tab navigator but onStateChange is only available in the and not in the nested navigators.
Is their anyway I can archieve this?
The navigator config is:
const TabNav = (
<Tab.Navigator>
<Tab.Screen name='Home' component={HomeScreen}/>
<Tab.Screen name='Profile' component={ProfileScreen}/>
<Tab.Screen name='Add Item' component={AddItemScreen}/>
</Tab.Navigator>
)
<NavigationContainer>
<Stack.Navigator>
<Stack.Screen name='Login' component={LoginScreen}/>
<Stack.Screen name='App' component={TabNav}/>
</Stack.Navigator>
</NavigationContainer>
[답변]
I had a similar Navigation hierarchy with react-navigation v5 and I wanted to change the Header Title inside a View in the nested TabNavigator. I finally achieved it by getting the parent navigation item of the StackNavigator with dangerouslyGetParent() and then using setOptions().
So here is your minimal Code for one of the three views inside your TabNav:
import React, {useCallback} from 'react';
import { useNavigation, useFocusEffect } from '@react-navigation/native';
const HomeScreen = (props) => {
// TabNav navigation item
const navigation = useNavigation();
// Effect will be triggered everytime the Tab changes
// Mounting is not enough -> Tabs will not be unmount by change
useFocusEffect(
useCallback(() => {
// Get StackNav navigation item
const stackNavigator = navigation.dangerouslyGetParent();
if(stackNavigator){
// Actually set Title
stackNavigator.setOptions({
title: "Home"
});
}
}, [navigation])
);
return (
/* Component Items */
);
};
'JavaScript > React Native' 카테고리의 다른 글
[React Native] Change Package(Android) & Bundle Id(iOS) (0) | 2020.11.24 |
---|---|
[React Native] 시작하기 (Windows 10) (0) | 2020.11.19 |
[React Native & Expo] Google Login 구글로그인 (0) | 2020.09.29 |
[React Native & Expo & Firebase] Google Login_React Navigation Basic (0) | 2020.09.28 |
[React Native & Expo] expo 프로젝트 시작하기 (0) | 2020.09.28 |
댓글