View
ํฌ๊ธฐ(๋ฒ์)๋ฅผ ๊ฒฐ์ ํ๋ ์์ฑ. flex์ width, height์ผ๋ก ๋๋ ์ ์๋ค.
flex
ํฌ๊ธฐ๋ฅผ ๋น์จ๋ก ์ค์
export default class App extends Component<Props> {
render() {
return (
<View style={styles.container}>
<View style={styles.case1} />
<View style={styles.case2} />
<View style={styles.case3} />
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: 'white',
},
case1: {
flex: 1,
backgroundColor: 'red',
},
case2: {
flex: 3,
backgroundColor: 'green',
},
case3: {
flex: 1,
backgroundColor: 'blue',
}, });
width, height
์ซ์๋ฅผ ๋ฃ์ผ๋ฉด ๊ณ ์ ํฌ๊ธฐ, %๋ฅผ ๋ฃ์ผ๋ฉด ํ๋ฉด ํฌ๊ธฐ์ ๋ฐ๋ฅธ ์๋์ ํฌ๊ธฐ๋ก ์ค์ ํ ์ ์๋ค.
import React, {Component} from 'react';
import {StyleSheet, Text, View} from 'react-native';
type Props = {};
export default class App extends Component<Props> {
render() {
return (
<View style={styles.container}>
<View style={styles.case1} />
<View style={styles.case2} />
<View style={styles.case3} />
<View style={styles.case4} />
<View style={styles.case5} />
</View>
);}}
const styles = StyleSheet.create({
container: {
flex: 1,
flexDirection: ‘row’, // ํน์ column
},
case1: {
width:100,
height:100,
backgroundColor: 'red',
},
case2: {
width:50,
height:100,
backgroundColor: 'green',
},
case3: {
width:150,
height:70,
backgroundColor: 'blue',
},
case4: {
width:"100%",
height:70,
backgroundColor: 'black',
},
case5: {
width:"50%",
height:"50%",
backgroundColor: 'yellow',
},
});
๋ฐฐ์น(Flex Direction)์ ์ ๋ ฌ(justify content, align items)
View์์ ์์ ์์๋ค์ ๊ฐ๋ก, ์ธ๋ก๋ก ์๊ธฐ ์ํด์ Flex Direction ์คํ์ผ์ ์ฌ์ฉํ๋ค.
Flex Direction์ row(ํ), column(์ด) ์์ฑ์ด ์์ผ๋ฉฐ row๋ ๊ฐ๋ก๋ฐฐ์น, column์ ์ธ๋ก๋ฐฐ์น์ด๋ค.
์ ์ฝ๋ ์ฃผ์ ์ฐธ๊ณ
Align Items
๋ฐฐ์น๋ฐฉํฅ(Flex Direction)์ผ๋ก๋ถํฐ ์์งํ ์ ๋ ฌ์ ๋ปํ๋ค.
flex-start, center, flex-end, stretch, vaseline์ 5๊ฐ์ง ์์ฑ์ด ์๋ค.
flex๋ ๊ฐ๋ก ์ ๋ ฌ์ ๊ธฐ์ค์ผ๋ก ์ข์ธก(์์์ ), center๋ ๊ฐ์ด๋ฐ, flex-end๋ ์ฐ์ธก(๋์ )์ ๋ปํ๋ค.
stretch๋ ์ ๋ ฌ ๋ฐฉํฅ์ ํฌ๊ธฐ๋ฅผ ์ง์ ํ์ง ์์์ ๋, flex-start ์ง์ ๋ถํฐ flex-end์ง์ ๊น์ง ์ญ ๋๋ฆฌ๋ ์์ฑ์ด๋ค.
TouchableOpacity
TouchableOpacity ์ปดํฌ๋ํธ๋ ‘ํฐ์น ์ด๋ฒคํธ(onPress ๋ฑ)๋ฅผ ์ฌ์ฉํ ์ ์๋ View’๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
TouchableOpacity ์ปดํฌ๋ํธ์ Text ์ปดํฌ๋ํธ๋ฅผ ๋ฃ์ด์ ๋ฒํผ์ฒ๋ผ ์ธ ์ ์๋๋ก ๋ง๋ ๊ฒ์ด๋ค.
Opacity๋ ํฌ๋ช ๋๋ฅผ ๋ปํ๋๋ฐ, ๋ฒํผ์ ๋๋ ์ ๋ ํฌ๋ช ๋๊ฐ ๋ค์ด๊ฐ์ ์ด ๋ฒํผ์ ์ด๋ฒคํธ๊ฐ ์ผ์ด๋๊ณ ์๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
์ด๋ฏธ์ง ์ปดํฌ๋ํธ
์ด๋ฏธ์ง ์ปดํฌ๋ํธ์ ์ด๋ฏธ์ง๋ฅผ ์ง์ ํด์ฃผ๊ธฐ ์ํด์ source๋ผ๋ ์์ฑ์ ๋ช ์ํด์ค์ผํ๋ค.
source={{uri: ‘์ด๋ฏธ์ง์ฃผ์’}}๋ก ์ธ๋ถ ์ฃผ์๋ฅผ ํตํด ๊ฐ์ ธ์ค๊ฑฐ๋,
source={require(‘๋ก์ปฌ๊ฒฝ๋ก’)}๋ฅผ ํตํด ๋ด๋ถ์ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
์ธ๋ถ ์ด๋ฏธ์ง๋ ๋์ ์๋ฒ์ ์ํ์ ๋ฐ๋ผ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ๋ ์๋ค.
resizeMode
์ปดํฌ๋ํธ ํฌ๊ธฐ์ ๋ง๊ฒ ์ด๋ฏธ์ง๋ฅผ ์กฐ์ ํ๋ ์คํ์ผ์ resizeMode๋ผ๊ณ ํ๋ฉฐ, ๋ํ์ ์ผ๋ก cover๊ณผ contain ์์ฑ์ด ์๋ค.
cover
style={{height:'100%',width:'100%',resizeMode:'cover'}}
cover๋ Image ์ปดํฌ๋ํธ์ ๊ธฐ๋ณธ ์์ฑ์ด๋ค.
์ด๋ฏธ์ง์ ๊ฐ๋ก ์ธ๋ก ์ค ์ข์ ๋ถ๋ถ์ด ๋ถ๋ชจ ์ปดํฌ๋ํธ์ 100%๋ฅผ ์ฐจ์งํ ๋๊น์ง ์ด๋ฏธ์ง๋ฅผ ๋๋ฆฌ๋ ๊ฒ์ด๋ค.
contain
style={{height:'100%',width:'100%',resizeMode:'contain'}}
cover์ ๋น์ทํ์ง๋ง ๊ฐ๋ก ์ธ๋ก ์ค ๋์ ๋ถ๋ถ์ด 100%๋ฅผ ์ฐจ์งํ ๋๊น์ง๋ง ์ด๋ฏธ์ง๋ฅผ ๋๋ฆฌ๋ ๊ฒ์ด๋ค.
'๐ Development > React Native' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
React ๊ฐ๋ฐ์ Node.js๊ฐ ํ์ํ ์ด์ (0) | 2023.06.15 |
---|---|
[React Native] ์ปดํฌ๋ํธ ์คํ์ผ๋ง (0) | 2023.06.15 |
[React Native] context API๋ (0) | 2023.06.15 |
[React Native] State์ React Hook(useState) - ํจ์ํ ์ปดํฌ๋ํธ์ ํด๋์คํ ์ปดํฌ๋ํธ ๋์ ์ธ ๋ฐ์ดํฐ ๋ค๋ฃจ๊ธฐ (0) | 2023.06.15 |
[React Native] Props ๋? ์์ (0) | 2023.06.15 |