Header buttons | React Navigation
(1) Screen Component์ ์ต์ ์ด์ฉํด์ ํค๋ ๋ฒํผ ๋ฌ๊ธฐ
์คํฌ๋ฆฐ ์ปดํฌ๋ํธ์ Options์์ headerRight, headerLeft key ๊ฐ์๋ค๊ฐ
ํจ์ํ ์ปดํฌ๋ํธ๋ฅผ value๋ก ๊ธฐ์
ํ๋ค.
๊ทธ๋ฌ๋ฉด ํด๋น ํจ์ํ ์ปดํฌ๋ํธ์ ๋ก์ง ๋๋ก ์์ง์ธ๋ค.
์ฐ๋ฆฌ๋ ํด๋น ํจ์ํ ์ปดํฌ๋ํธ๊ฐ <Button/> ํ๊ทธ๋ฅผ ๋ฐํํ๋๋ก ๋ง๋ค์๋ค.
<View></View>๋ฅผ ๋ฐ๋ก ์ฐ์ง ์์๋ ๋์๊ฐ๋ ๊ฒ ๋ณด๋,
์ ๋ฒ ์ค๋ช
์์ ์ฒ๋ผ Screen์ Header ์ ์ฒด๋ฅผ ๊ฐ์ธ๋ View ํ๊ทธ๊ฐ ๋ด์ฅ๋์ด
์๋ ๊ฒ ๊ฐ๋ค.
function StackScreen() {
return (
<Stack.Navigator>
<Stack.Screen
name="Home"
component={HomeScreen}
options={{
headerTitle: (props) => <LogoTitle {...props} />,
headerRight: () => (
<Button
onPress={() => alert('This is a button!')}
title="Info"
color="#fff"
/>
),
}}
/>
</Stack.Navigator>
);
}
๋ฐ์ ์ฒ๋ผ Options์์ ์ฝ๋ฐฑํจ์๋ฅผ ์ด์ฉํด, route๋ฅผ ๋ฐ์์ option value ์ปดํฌ๋ํธ์ ์ธ์๋ก๋ ๋ณด๋ผ ์ ์๋ค.
options={({route}) =>({
headerTitle: ({route.param}) => <LogoTitle {...props} />,
headerRight: () => (
<Button
onPress={() => alert('This is a button!')}
title="Info"
color="#fff"
/>
),
})}
ํ์ง๋ง ์ด๋ ๊ฒ ์คํฌ๋ฆฐ ์ปดํฌ๋ํธ์ ์ต์
์ผ๋ก ํค๋ ๋ฒํผ์ ๋ง๋๋ ๊ฒ์
์ ์ข์ ๋ฐฉ๋ฒ์ด๋ค.
์๋ํ๋ฉด
ํค๋๋ ์คํฌ๋ฆฐ์ ๋ด์ฉ๋ฌผ์ด ๋๋ ์ปดํฌ๋ํธ์ ์์ ํ ๊ด๊ณ ์๋ ๋ถ๋ถ์ด๊ธฐ ๋๋ฌธ์,
ํค๋์ ๋ฒํผ์ ๋๋ฆ์ผ๋ก์ ํด๋น ํค๋๊ฐ ์ํ ์คํฌ๋ฆฐ๊ณผ ์ํธ์์ฉ์ ํ ์ ์๋ค.
(์ 3์ ์ปดํฌ๋ํธ์ ์ํ ๋ณ์๋ฅผ ๋ณด๋ด๊ณ , ์ด๋ฅผ ํตํด ํค๋ ์ปดํฌ๋ํธ์ ์คํฌ๋ฆฐ์
์ฐ๊ฒฐํ๋ ์์
์ผ๋ก ๊ฐ๋ฅํ๊ฒ ํ ์ ์์ง๋ง ๋๋ฌด ๋ฒ๊ฑฐ๋กญ๋ค.)
(2) ์ต์ ์ ํตํด ๋ง๋ ํค๋์ ์คํฌ๋ฆฐ(๋ด์ฉ๋ฌผ) ๊ฐ์ ์ํธ ์์ฉ
function StackScreen() {
return (
<Stack.Navigator>
<Stack.Screen
name="Home"
component={HomeScreen}
options={({ navigation, route }) => ({
headerTitle: (props) => <LogoTitle {...props} />,
/*๋ฒํผ ์ด๋ฆ๋ง ์์ ๋ฟ ๊ธฐ๋ฅ์ด ์์*/
headerRight: () => (
<Button title="Update count" />
),
})}
/>
</Stack.Navigator>
);
}
function HomeScreen({ navigation }) {
const [count, setCount] = useState(0);
/*navigation์ ๋ณ๋์ฌํญ์ด ์๊ธฐ๋ฉด, ์ฆ ํ๋ฉด์ด๋์ ํ๋ฉด ํด๋น setOptions๊ฐ ๋ฐ๋ํจ
์ด๋ ํ ๊ณณ์ผ๋ก๋ผ๋, ํ๋ฉด ์ด๋์ header์ ๋ฒํผ์ ๊ธฐ๋ฅ์ด ์๊น*/
useEffect(() => {
navigation.setOptions({
headerRight: () => (
<Button onPress={() => setCount((c) => c + 1)} title="Update count" />
),
});
}, [navigation]);
return <Text>Count: {count}</Text>;
}
(3) back ๋ฒํผ ์ปค์คํฐ๋ง์ด์ง ํ๊ธฐ
a. back ๋ฒํผ์ ์ด๋ฆ์ด๋ ์ด๋ฏธ์ง, ํ ์คํธ ์คํ์ผ๋ง ๋ฐ๊พธ๊ธฐ
headerBackTitleStyle์ด๋ , headerBackTitle ๊ฐ์ options์ key๊ฐ์ value๋ฅผ ์ฑ์๋ฃ์์ผ๋ก์ ๊ฐ๋ฅ
BactTitle ์ฌ์ฉ ์ ์ฃผ์์ .
ํด๋น ์์ฑ์ ์ด ์์ฑ์ ์ด ์คํฌ๋ฆฐ์ ์ ์ฉ๋๋ ๊ฒ์ด ์๋๋ผ, ํ๋ฉด ์ด๋ํ ๋ค์ ์คํฌ๋ฆฐ์ back ๋ฒํผ์ผ๋ก ์ ์ฉ๋๋ค.
headerBackTitle props not working · Issue #1358 · react-navigation/react-navigation · GitHub
b. ์์ back ๋ฒํผ ์ปค์คํฐ๋ง์ด์ง ํด๋ฒ๋ฆฌ๊ธฐ
์์์ ๋ฐฐ์ด HeaderLeft์ ์ฝ๋ฐฑํจ์๋ฅผ ๋ฃ์ด์ ์์ ํ ์ปค์คํฐ๋ง์ด์ง ํด๋ฒ๋ฆฌ๋ฉด ๋๋ค.
back ๋ฒํผ์ default ๊ฐ์ผ๋ก ์ฐ๋ฆฌ๊ฐ HeaderLeft๋ฅผ ์ปค์คํฐ ๋ง์ด์ง ์ ์ฐ์ ์์์์ ๋ฐ๋ ค๋ ์ฌ๋ผ์ง๋ค.