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

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

[React-Native] Drawer | Custom Component ๋ณธ๋ฌธ

Computer ๐Ÿ’ป/React

[React-Native] Drawer | Custom Component

yeon42 2021. 7. 29. 20:16
728x90

* Side Drawer์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•˜๊ธฐ

 

  • my_drawer.js ๋ผ๋Š” ์ƒˆ๋กœ์šด ํŒŒ์ผ ์ƒ์„ฑ
class SideDrawer extends Component {
  render() {
    return (
      <View style={styles.container}>
          <Text>Hello World</Text>
      </View>
    )
  }
}

 

 

  • App.js์—์„œ CustomDrawerContent ํ•จ์ˆ˜ ๋Œ€์‹  SideDrawer ํ•จ์ˆ˜๋กœ ๋ณ€๊ฒฝ
drawerContent={props => <SideDrawer {...props} />}

 

 

 


 

* ์—ฌ๊ธฐ์— ๊ทธ๋ฆผ๋„ ๋„ฃ์–ด๋ณด๊ณ , drawer Content๋“ค๋„ ์ถ”๊ฐ€ํ•ด๋ณด์ž

 

class SideDrawer extends Component {
  render() {
    return (
      <View style={styles.container}>
          <ScrollView>
              <View>
                  <View style={styles.imageContainer}>
                      <Image
                        source={Logo}
                        style={{width: 40, height: 40}}
                      />
                  </View>
              </View>
          </ScrollView>
      </View>
    )
  }
}

  - rendering๋˜๋Š” ๊ณณ์— <ScrollView> - <Image> ํƒœ๊ทธ ์•ˆ์— ์‚ฌ์ง„์˜ source ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

 

 


 

  • ์ƒˆ๋กœ์šด ํƒœ๊ทธ ๋งŒ๋“ค์–ด Content ์ถ”๊ฐ€ํ•˜๊ธฐ
<Text style={styles.sectionHeading}>Section 1</Text>
                  <View style={styles.navSectionStyle}>
                      <Text style={styles.navItemStyle}>Home</Text>
                      <Text style={styles.navItemStyle}>User</Text>
                      <Text style={styles.navItemStyle}>Help</Text>
                      <Text style={styles.navItemStyle}>Info</Text>
                  </View>

 

 

 


 

* Content ๋ˆ„๋ฅด๋ฉด ํ•ด๋‹น ์Šคํฌ๋ฆฐ์œผ๋กœ ๋„˜์–ด๊ฐ€๋„๋ก ํ•˜์ž

  -> onPress ์†์„ฑ ์ด์šฉ

 

import { CommonActions } from '@react-navigation/native';

 

  • CommonActions
navigateToScreen = (route) => () => {
        this.props.navigation.dispatch(
            CommonActions.navigate({
                name: route,
                params: {},
            })
        )
    }

  - ์—ฌ๋Ÿฌ action creaters๋ฅผ ์“ฐ๊ฒŒ ๋„์™€์คŒ

  - ๊ทธ ์ค‘ navigation๋ผ๋Š” ction์€ ํŠน์ • ๋ฃจํŠธ๋กœ ์ด๋™ํ•˜๊ฒŒ๋” ๋„์™€์ฃผ๋Š” ction์ด๊ณ ,

   ์ด action์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋ฉด, dispatch๋ฅผ ํ†ตํ•ด state ๊ฐ’์„ ์—…๋ฐ์ดํŠธ ์‹œ์ผœ์ค€๋‹ค.

 

  - arrow function์ด 2๊ฐœ ํ•„์š”ํ•˜๋‹ค.   ==>   return ๊ฐ’๋„ 2๊ฐœ๋‹ค.

  - ์ค‘๊ด„ํ˜ธ ์•ˆ์˜ ๊ฐ’์„ returnํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋˜ return ๊ฐ’์œผ๋กœ ๋ฐ›์•„์˜ด

 

 

<View style={styles.navSectionStyle}>
                    <Text 
                        style={styles.navItemStyle}
                        onPress={this.navigateToScreen('Home')}
                    >
                        Home
                    </Text>

  - Screen์ด๋™์„ ์œ„ํ•ด Home๊ณผ User์€ ์ด๋ ‡๊ฒŒ ์Šคํƒ€์ผ์„ ์ฃผ๊ณ ,

 

<Text 
                        style={styles.navItemStyle}
                        onPress={()=>alert('Help Window')}
                    >
                        Help
                    </Text>

  - alert ์ฐฝ์„ ๋„์šฐ๊ธฐ ์œ„ํ•œ Help์™€ Info๋Š” ์ด๋ ‡๊ฒŒ ์Šคํƒ€์ผ์„ ์ค€๋‹ค.

 

Comments