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

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

[React-Native] Stack | Header Bar ์ปค์Šคํ„ฐ๋งˆ์ด์ง• & ๋ฒ„ํŠผ ์ถ”๊ฐ€ ๋ณธ๋ฌธ

Computer ๐Ÿ’ป/React

[React-Native] Stack | Header Bar ์ปค์Šคํ„ฐ๋งˆ์ด์ง• & ๋ฒ„ํŠผ ์ถ”๊ฐ€

yeon42 2021. 7. 28. 23:39
728x90
pictogram free

์œ„ ์‚ฌ์ดํŠธ์—์„œ ์•„๋ฌด ์‚ฌ์ง„ ํ•˜๋‚˜ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์•„ src/assets/pics ํด๋”์— ์‚ฝ์ž…

 

 

logoTitle = () => {
    return (
      <Image
        style={{width: 40, height: 40}}
        source={require('./src/assets/pics/ํŒŒ์ผ์ด๋ฆ„.png')}
      
      />
    )
  }

  - ํŒŒ์ผ source๋ฅผ inline์œผ๋กœ ๋ฐ›์•„์˜ฌ ๋•Œ๋Š” require() ์‚ฌ์šฉ

 

Home Screen
User Screen

 


  • ์ฝ”๋“œ ๋” ๊น”๋”ํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด?

  -> ๋”ฐ๋กœ ํด๋ž˜์Šค ์ •์˜ํ•˜๊ธฐ

 

- ์šฐ๋ฆฌ๋Š” logo.js๋ผ๋Š” ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด LogoTitle๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•ด import ํ•ด์™”๋‹ค.

- App.js์—์„œ headerTitle์„ <LogoTitle/>๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ๋˜‘๊ฐ™์€ ๊ฒฐ๊ณผ !

 

 

 


 

  •  User Screen์—์„œ Back ๋ฒ„ํŠผ์— ์ด๋ฏธ์ง€๊ฐ€ ์•„๋‹Œ Text๋ฅผ ์ž…๋ ฅํ•˜๊ณ ์‹ถ๋‹ค๋ฉด?
headerBackTitle: 'BACK'

  - UserScreen ํด๋ž˜์Šค ์•ˆ์˜ headerStyle()์— headerBackTitle ์‚ฝ์ž…

 

 

render() {
    this.headerStyle();

  - ์•„๋ž˜ render()์—์„œ ์œ„ ์ฝ”๋“œ ์ฃผ์„ ํ•ด์ง€

 

  - BACK ํ…์ŠคํŠธ ์ƒ์„ฑ๋จ

 

 


 

  • Home Screen์— ๋ฒ„ํŠผ์„ ์ถ”๊ฐ€ํ•ด๋ณด์ž
import { StyleSheet, View, Text, Image, Button } from 'react-native';

  - Button ์‚ฝ์ž…์„ ์œ„ํ•œ ํด๋ž˜์Šค import

 

<Stack.Screen 
            name="Home" 
            component={HomeScreen}
            options={{
              title: 'Home Screen',
              headerTitle: <LogoTitle/>,
              headerRight: () => (
                <Button
                  title="Info"
                  onPress={()=>alert('I am a button!!')}
                  color='orange'
                />
              )
            }}
          />

  - <Stack.Screen> ์ฝ”๋“œ ์•ˆ์— headerRight ์†์„ฑ ์‚ฝ์ž…

  - ์ผ๋‹จ ์ž˜ ๋™์ž‘ํ•˜๋Š”์ง€ alert ๋„์›Œ๋ณด๊ธฐ

 

  - ์˜ค๋ฅธ์ชฝ(headerRight)์— Info๋ผ๋Š” ๋ฒ„ํŠผ์ด ์ƒ๊ฒผ๊ณ , ํด๋ฆญํ–ˆ์„ ๋•Œ alert ์ฐฝ์ด ์ž˜ ๋œฌ๋‹ค !

 

 

 


 

  • User Screen์—๋„ ๋ฒ„ํŠผ ์ถ”๊ฐ€ํ•ด๋ณด๊ธฐ
headerBackTitle: 'BACK',
          headerRight: () => (
            <Button
              title="Go Back"
              onPress={()=>{
                this.props.navigation.navigate('Home')
              }}
              color='orange'
            />
          )

  - ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ headerStyle() ํ•จ์ˆ˜ ์•ˆ์— ์ž‘์„ฑ

  - ํ™”๋ฉด์„ ์ด๋™ํ•˜๋Š” ์ด๋ฒคํŠธ(ํ•จ์ˆ˜) ์ƒ์„ฑํ•ด๋ณด์ž

 

  - User Screen์—์„œ ์šฐ์ธก ์ƒ๋‹จ(headerRight)์˜ Go Back ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด Home Screen์œผ๋กœ ์ด๋™ํ•œ๋‹ค.

 

 

* ์ขŒ์ธก์˜ BACK ๋ฒ„ํŠผ

  - default๋กœ ์ƒ์„ฑ๋˜๋Š” ๋ฐฑ๋ฒ„ํŠผ

  - ์ •๋ง๋กœ ๊ทธ ๋‹จ๊ณ„๋กœ ๋Œ์•„๊ฐ€๊ธฐ

 

* ์šฐ์ธก์˜ Go Back ๋ฒ„ํŠผ

  - ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ๋ฒ„ํŠผ

  - navigate ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด hoem ํ™”๋ฉด์œผ๋กœ ๊ฐ€๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ

  -> ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ™”๋ฉด์„ ๊ฐ€์ง„๋‹ค๋ฉด, ๋‹ค๋ฅธ ํŠน์ • screen์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค !

 

 

Comments