<๊ฐ์>
Myprofile ์ฉ ๋ชจ๋์ ์๋ก ๋ง๋ค์ด์ ๋ด์ฉ์ ์ ์ ๋ค import
๊ทธ๋ฆผ๊ณผ ๊ธ๋ค ์ฌ์ด์๋ flex-direction row๋ฅผ ํก์ผ๋ก ๊ฐ๋๋ก
๊ธ ๋ผ๋ฆฌ๋ ์ด๋ก ๊ฐ๋๋ก ์ค์ ,
Margin์ ์ฃผ๋ ๋ชจ๋์ ๋ง๋ค์ด์ ์ํ๋ฐ, ํ๋กํ, ๋ ํ๋กํ ๋ด์ฉ๋ค ์ฌ์ด์ margin ์ฃผ๊ธฐ
Margin Module์ ์ฐ๋ ์ด์ ๋ ํด๋น Margin์ ์ค์ผํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ ๊ฒ ์ด๊ธฐ ๋๋ฌธ์
๊ณ์ <View/> ๋ก ์ฃผ๋ ๊ฒ๋ณด๋ค ์ด๋ฅผ ์ํ ์ปดํฌ๋ํธ๋ฅผ ํ๋ ๋ง๋๋ ๊ฒ ๋ซ๋ค.
0. iphone-x-helper๋ ์ด์ ์๋น์ค๋ฅผ ์ข ๋ฃํจ.
์ด๊ฒ์ ๋์ฒดํ๋ git-hub ๋ด์ฉ
(1) ์ฌ์ฉ ์ ์ค์น ํ์
(2) ์ฌ์ ์ค๋น
import { SafeAreaProvider } from 'react-native-safe-area-context';
function App() {
return <SafeAreaProvider>...</SafeAreaProvider>;
}
import ๋ฐ ์ฌ์ฉ ์ ์ return ๋ด์ฉ์ ์ ๋ถ <safeAreaProvider๋ก ๊ฐ์ธ์ผ ํจ.>
(3) ์ฐ๋ ๋ฐฉ๋ฒ
return (
<SafeAreaProvider>
<SafeAreaView edges={['right', 'left']} style={styles.container}>
<Header />
</SafeAreaView>
</SafeAreaProvider>
)
View๋ SafeAreaView๋ก ๋ฐ๊ฟ ์ฌ์ฉ ํด์ผํจ. ๊ทธ๋ฌ๋ฉด ์๋์ผ๋ก ์์ ์์ญ์์ ์ฒ๋ฆฌ ๋๋ค.
์ฌ๊ธฐ์ ์ธ ์ ์๋ ์์ฑ์ edge๋ก
edge๋ก top , bottom, right, left๋ฅผ ์ฃผ๋ฉด ํด๋น ์์ญ์์๋ง ์์ ์์ญ ์ ์ชฝ์ผ๋ก ์ฐ์ธ๋ค.
์ ์์๋ top, bottom์ ๋บ์ผ๋ฏ๋ก, ์ฑ ๋ด์ฉ์ด ํธ๋ํฐ์ ๋ฐฐํฐ๋ฆฌ ์๋ ํ์๋ ํ ๋ฒํผ ๋ถ๋ถ๊ณผ ๊ฒน์น ๊ฒ์ด๋ค.
(4) flex:1 ๊ฐ ๋ฌด์์ธ๊ฐ?
a. flex์ ์์ฑ
- flex basis
: ํด๋น flex item์ ๊ณ ์ ํฌ๊ธฐ๋ฅผ ์ ํ๋ ๊ฒ. flex-direction์ด row๋ฉด ๋๋น, column์ด๋ฉด ๋์ด๋ฅผ ์๋ฏธํจ.
default ๊ฐ์ auto๋ก ์๋ ๊ฐ์ง ํฌ๊ธฐ ๋๋ก ๊ฐ๋ ๊ฒ.
px, rem, em, % ๋ฑ์ผ๋ก ์ค์ ๊ฐ๋ฅ
- flex-grow
: ๋ถ๋ชจ ์์์ ๊ณต๊ฐ ์ค ์ฌ๋ฐฑ์ ์ผ๋ง๋ ์ฐจ์งํ ๊ฒ์ธ๊ฐ
๊ฐ์ด 0์ด๋ฉด ์ฌ๋ฐฑ ์ฐจ์ง ํ๊ธฐ ์ํด ์ปค์ง์ง ์๊ณ , basis์ ๊ณ ์ ๋๋น ์ด์ฉํ๊ฒ ๋ค.
๊ฐ์ด 1 ์ด์์ด๋ฉด, basis๋ณด๋ค ์ปค์ง ์ฉ์ด๊ฐ ์๊ณ , ํ์ ๋ค๊ณผ ๊ฒฝ์ํ๊ฒ ๋ค.
ํ์ ๋ค์ flex grow์ ๊ฐ๊ณผ์ ์๋ ๋น์จ ์ฐจ์ด๋ก ์ปค์ง๋ ์ ๋๊ฐ ๊ฒฐ์ ๋๋ค.
์๋ฅผ ๋ค์ด div1 ์ grow๊ฐ 1์ด๊ณ , div2์ grow๊ฐ 3์ด๋ฉด, div 1์ด ์ ์ฒด์ 25% ์ฐจ์ง, div2๋ ์ ์ฒด์ 75% ์ฐจ์ง ํ๊ฒ ๋ค๋ ๋ป์ด๋ค.
- flex-shrink
: ์์ ๊ณผ ํ์ ๋ค์ ๊ณ ์ ๋๋น ๊ฐ์ด ๋ถ๋ชจ ์์์ ํฌ๊ธฐ๋ฅผ ๋์์ ๋๋ ์๋ก ํฌ๊ธฐ๋ฅผ ์ค์ฌ์ ๊ทธ ์์ผ๋ก ๋ค์ด์์ผ ํ๋ค.
shrink๋ ์ผ๋ง๋ ์ค์ด๋ค ๊ฒ์ธ์ง ์ด๋ค.
๋ง์ ๋ฉด์์ grow์ ์ฑ์ง์ด ๊ฐ๋ค. ๊ฐ์ด 0์ด๋ฉด ์ ์ค์ด๋ค๊ณ , ๋ถ๋ชจ ์์ ๋ฐ์ผ๋ก ํ์ด๋์์ basis ๊ณ ์ ๋๋น ๊ณ ์ํ๊ฒ ๋ค.
1 ์ด์์ด๋ฉด, ํ์ ๋ค๊ณผ์ ๋น์จ ์ฐจ์ด๋ก ์ค์ด๋ฆ, 1๋ณด๋ค ํด์๋ก ๋ง์ด ์ค์ด๋ฆ
- flex: 1
์ ๋ค์๊ณผ ๊ฐ๋ค. flex-basis: 0%, flex shrink: 1 , flex-grow: 1
์ด๊ฒ์ ์๋ฏธ๋ ๊ณ ์ ๋๋น ์์ด ํ๋ฉด ๋น์จ์ ๋ฐ๋ผ ๋์ด๋๊ณ ์ค์ด๋ค๊ฒ ๋ค๋ ๋ป์ด๋ค.
2. ์ฝ๋ ๋ฆฌ๋ทฐ
/*MyProfile.js ์*/
import { View, Image, Text } from "react-native"
import Margin from "./Margin"
export default (props) => {
return (
<View style={{flexDirection: "row"}}>
<Image source={{uri: props.uri}} style={{width: 50, height: 50, borderRadius: 20}}/>
<View style={{justifyContent: "center", marginLeft: 10 }}>
<Text style= {{fontWeight: "bold", fontSize: 16}}>{props.name}</Text>
<Margin height= {1}/>
<Text style = {{fontSize: 12, color: "grey"}}>{props.introduction}</Text>
</View>
</View>
)
}
/*App.js ์ -myprofile์ด๋ผ๋ ๋ชจ๋์ data.js ์์ ๋ง๋ค์ด์ ์์ ๋ฐ์ดํฐ๋ค์ ์ ๋ถ ๋ด์ ๋์๋ค.*/
export default function App() {
return (
<View style={styles.container}>
<Header />
<Margin height = {10}/>
<MyProfile
uri={myProfile.uri}
name={myProfile.name}
introduction={myProfile.introduction}
/>
</View>
);
}
3. ์ค์ค๋ก ํด๋ณด๊ธฐ
import { Image, Text, View, StyleSheet } from "react-native"
export default (props) => {
return (
<View style={styles.container}>
<Image source={{uri: props.uri}} style={styles.image} />
<View>
<Text style={styles.text}>์๋
ํ์ธ์!</Text>
<Text style={styles.text}> "{props.name}" ๊ฒฝ๊ด๋!</Text>
</View>
</View>
)
}
const styles = StyleSheet.create({
container: {
flexDirection: "row",
},
image: {
width: 100,
height: 50,
borderRadius: 20,
borderWidth: 2,
borderColor: "black"
},
text: {
marginLeft: 5,
paddingTop: 2,
fontSize: 15,
}
})