๊ด€๋ฆฌ ๋ฉ”๋‰ด

yeon's ๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป

[React-Native] Stack | Header Bar ์„ค์ • ๋ณธ๋ฌธ

Computer ๐Ÿ’ป/React

[React-Native] Stack | Header Bar ์„ค์ •

yeon42 2021. 7. 27. 22:58
728x90
  • ์ง€๊ธˆ๊นŒ์ง€๋Š” Button์„ ๋ˆ„๋ฅด๋ฉด์„œ parameter ๊ฐ’์„ passing ํ•ด์ฃผ์—ˆ๋‹ค.
  • ๊ทธ๋Ÿฐ๋ฐ ๊ฐ ๋ฃจํŠธ ์ƒ์„ฑ ์‹œ์— parameter์„ ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜๋„ ์žˆ๋‹ค!

 

<Stack.Screen name="Home" component={HomeScreen}/>
<Stack.Screen 
	name="User" 
	component={UserScreen}
	initialParams = {{
		userIdx: 50,
		userName: 'Gildong',
		userLastName: 'Go'
	}}
/>

  - App.js์— parameter์„ ์„ค์ •(์ดˆ๊ธฐํ™”)ํ•˜์ž

 

์ดˆ๊ธฐ User Screen ํ™”๋ฉด
'To Home Screen' ๋ฒ„ํŠผ ๋ˆ„๋ฅด๋ฉด
'To User Screen' ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ ๋‹ค์‹œ User Screen์œผ๋กœ ๋Œ์•„์˜ค๋ฉด

- ์ฒ˜์Œ ํ™”๋ฉด์—๋Š” App.js์—์„œ ์ดˆ๊ธฐํ™” ํ•œ ๊ฐ’์œผ๋กœ ์„ค์ •๋˜์–ด์žˆ๋Š”๋ฐ  

- ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ๋Œ์•„๊ฐ€๋ฉด ๊ฐ js์— ์ž…๋ ฅํ•œ ๊ฐ’์œผ๋กœ ๋ฐ”๋€Œ์–ด ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

-> StackScreen ์ƒ์„ฑ ์‹œ์— ๋ฃจํŠธ์˜ parameter ๊ฐ’๋“ค์„ ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ๊ตฌ๋‚˜!

 

 


 

  • Header Bar์˜ ์ด๋ฆ„์„ ๋ฐ”๊ฟ”๋ณด์ž

- default๋กœ name์— ์„ ์–ธํ•œ ๊ฐ’์ด ์ถœ๋ ฅ๋˜๊ณ  ์žˆ๋‹ค.

 

<Stack.Navigator initialRouteName="User">
	<Stack.Screen 
		name="Home" 
		...
		options={{title: 'Home Screen'}}
	/>

	<Stack.Screen 
		name="User" 
		...
		}}
		options={{title: 'User Screen'}}
	/>
</Stack.Navigator>

  - options์ด๋ผ๋Š” property ์•ˆ์— title ๊ฐ’์„ ์ค€๋‹ค.

 

 

- title์ด ๋ฐ”๋€ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 


 

 

  • ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜์ง€ ๋ง๊ณ ๋„ ์ž„์˜๋กœ ์กฐ์ • ๊ฐ€๋Šฅํ• ๊นŒ?
<Button
	title="Change the title"
	onPress={()=>
		this.props.navigation.setOptions({title: 'Changed!!!!'})
	}
/>

  - ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด Header Bar ๊ฐ’์„ ๋ฐ”๊พธ๋„๋ก !

 

  - 'Change the title' ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด Header Bar๊ฐ€ ๋ณ€๊ฒฝ๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 


 

 

  • ๋‹ค๋ฅธ option๋“ค๋„ ์„ค์ •ํ•ด๋ณด์ž
<Button
            title="Change the title"
            onPress={()=>
              this.props.navigation.setOptions({
                title: 'Changed!!!!',
                headerStyle: {
                  backgroundColor: 'pink'
                },
                headerTintColor: 'red'
              })
            }
/>

  - headerStyle๊ณผ headerTintColor ์ฃผ๊ธฐ

 

 

options={{
              title: 'User Screen',
              headerStyle: {
                backgroundColor: 'pink'
              },
              headerTintColor: 'red',
              headerTitleStyle: {
                fontWeight: 'bold',
                color: 'purple'
              }
}}

  - headerTintColor : 'red'

  - color : 'purple'

  -> ๋‘˜์˜ ์ฐจ์ด ํ™•์ธํ•˜๊ธฐ

 

 

 


 

 

- but, Stack Screen์ด ๊ต‰์žฅํžˆ ๋งŽ๋‹ค๋ฉด App.js์—์„œ ๋ชจ๋“  ํŒŒ์ผ์— ๋Œ€ํ•œ option ์„ค์ •์„ ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๊ต‰์žฅํžˆ ๋ถˆํŽธํ•œ ์ผ

  -> ๊ฐ screen์„ ๊ตฌ์„ฑํ•˜๋Š” jsํŒŒ์ผ์—์„œ ์„ค์ • ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

- ์œ„์—์„œ ๋งŒ๋“  App.js์˜ options๋“ค์€ ๋ชจ๋‘ ์ฃผ์„์ฒ˜๋ฆฌ ํ•ด์ฃผ๊ณ ,

headerStyle = () => {
    this.props.navigation.setOptions({
        title: 'Customizing',
          headerStyle: {
            backgroundColor: 'blue'
          },
          headerTintColor: 'yellow',
          headerTitleStyle: {
            fontWeight: 'bold',
            color: 'green'
          }
    })
  }

  - ์›ํ•˜๋Š” js์—์„œ ์ด๋ ‡๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

  - but, ์—ฌ๊ธฐ์„œ๋„ ๋งŒ์•ฝ ๋ชจ๋“  ํ™”๋ฉด์—์„œ์˜ header bar ์Šคํƒ€์ผ์„ ๋™์ผํ•˜๊ฒŒ ํ•˜๊ณ ์‹ถ๋‹ค๋ฉด

  ์ผ์ผ์ด ๊ฐ๊ฐ์˜ screen์—์„œ option ์„ค์ •ํ•˜๋Š” ๊ฒƒ์€ ๋˜ ๋น„ํšจ์œจ์ ์ผ ๊ฒƒ

 

  -> ๊ณตํ†ต์ ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ๋ฒ•์€? ๋‹ค์Œ ์‹œ๊ฐ„์— !

Comments