๋ฆฌ์กํธ๋ JSX ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ฉด์ ์ปดํฌ๋ํธ, ์ฆ ํ๊ทธ๋ค์ ๊ตฌ์ฑํ๋ฉฐ ์ด๋ฃจ์ด์ ธ ์๋ค. ๊ทธ๋์ HTML๊ณผ React, React Native ๊ฐ ์ ์ฌํ ํ๊ทธ๋ค์ด ์ข ์ข ๋ณด์ด๋๋ฐ, ์ค๋์ ๊ทธ๊ฒ๋ค์ ์ ๋ฆฌํด๋ณด๋ ํฌ์คํ ์ ํ๊ฒ ๋ค!
๋ฆฌ์กํธ์ ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ ํ๋ ์์ํฌ์ ์ฃผ๋ ฅ์ ๋ฐ๋ก JSX๋ผ๊ณ ํ ์ ์๋ค. ๋ฆฌ์กํธ์ ๊ณต์ ๋ฌธ์์์๋ JSX์ ์ฌ์ฉ์ ๋ค์๊ณผ ๊ฐ์ด ๊ถํ๊ณ ์๋ค.
React๋ JSX ์ฌ์ฉ์ด ํ์๊ฐ ์๋์ง๋ง, ๋๋ถ๋ถ์ ์ฌ๋์ JavaScript ์ฝ๋ ์์์ UI ๊ด๋ จ ์์ ์ ํ ๋ ์๊ฐ์ ์ผ๋ก ๋ ๋์์ด ๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ํ React๊ฐ ๋์ฑ ๋์์ด ๋๋ ์๋ฌ ๋ฐ ๊ฒฝ๊ณ ๋ฉ์์ง๋ฅผ ํ์ํ ์ ์๊ฒ ํด์ค๋๋ค. |
๊ทธ๋ฌ๋ฏ๋ก ์ฐ์ JSX์ ๋ํด ๊ฐ๋จํ ์์๋ณด๋๋ก ํ์!
JSX = JavaScript + XML
JSX๋?
JSX๋ JavaScript์ ํ์ฅ ๋ฒ์ ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. XML(eXtensible Markup Language)๋ ํ๊ทธ(tag, <>)์ ์ด๋ฆ์ ์์ ๋กญ๊ฒ ์ง๊ณ ์ฌ์ฉํ ์ ์๋ ๋ฌธ๋ฒ์ด๋ค. ์ด๋ฅผ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ JS์ ์ ์ฉ ์ํจ ๊ฒ์ด ๋ฐ๋ก JSX์ด๋ค. ์ด์ ๋ฐ๋ผ ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๊ฐ ๋ฑ์ฅํ ์ ์๋ ๊ฒ์ด๋ค.
const element = <h1>Hello, world!</h1>;
element๋ผ๋ ๋ณ์ ์์ <h1>ํ๊ทธ์ ๊ทธ์ ์์ ์์๋ฅผ ๋ด์๋๋ ์ด ์ฝ๋๊ฐ ๋ฐ๋ก JSX์ธ ๊ฒ์ด๋ค. ์ด๋ฅผ ์ปดํฌ๋ํธ๋ก์จ ๊ฐํธํ๊ฒ ํธ์ถํ์ฌ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฆฌ์กํธ์ ํต์ฌ์ด๋ผ๊ณ ํ ์ ์๋ค.
๋ํ ๋ค์๊ณผ ๊ฐ์ด ํ๊ทธ ์์ ์ฝ๊ฒ ๋ณ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
const msg = "Hello World!";
<Text>{msg}</Text>
๋ฌธ์์ด์ด ๋ด๊ธด msg ๋ณ์๋ฅผ ํ๊ทธ ๋ด์ ์ ๋ ฅํ ์ ์๋ ๊ฒ์ด๋ค. ๋ฌธ๋ฒ์ ํ๊ทธ์ ์์ ์์๋ก ์ค๊ดํธ{ }๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ ฅํ๋ ๊ฒ์ด๋ค. ๋ณ์์ ํ๊ทธ๋ฅผ ๋ด์ ์ ์์ผ๋ฏ๋ก, ์์ฒ๋ผ ๊ฐ๋จํ ๋ฌธ์์ด์ด ์๋ ๋ณต์กํ ํ๊ทธ ์์๋ค๋ ํ๋์ ์์ ์์๋ก ์ฝ๊ฒ ์ฝ์ ํ ์ ์๊ฒ ๋๋ค.
JSX๋ ํ ํ์ผ์ CSS, HTML, JavaScript๊ฐ ํผ์ฉ๋์ด ์ฝ๋๋ฅผ ์์ฑํ ์ ์๊ฒ ํด์ค๋ค. ๊ทธ๋์ ์ด ์ธ ์ธ์ด๋ฅผ ํ์ผ๋ณ๋ก ๊ตฌ๋ถํ์ฌ ๋ฐ๋ก ์์ ํ ๊ฒ์ ๋ฌด์ฒ ๋น์ฐํ ์ผ์ด์๊ธฐ์ JSX์ ๋ฑ์ฅ์ ํฐ ๋ณํ๋ฅผ ๊ฐ์ ธ์๋ค๊ณ ํ ์ ์์ผ๋ฉฐ, ๊ทธ๋งํผ ์๊ฒฌ์ด ๊ฐ๋ฆฌ๋ ์ธ์ด์ด๊ธฐ๋ ํ๋ค.
๋ฆฌ์กํธ๊ฐ JSX๋ฅผ ํ์ค JavaScript ์ธ์ด์ฒ๋ผ ์ด์ฉํ๋๋ก ํ ์ ์๋ ๊ฒ์ JS ์ปดํ์ผ๋ฌ์ธ ๋ฐ๋ฒจ(Babel)์ด ํฐ ์ญํ ์ ํ๊ณ ์๋๋ฐ, ์ด๋ฐ ์์ธํ ๋ด์ฉ์ ๋ค์์ ๋ ์์๋ณด๋๋ก ํ์. ์ด์จ๋ ์ฐ๋ฆฌ๋ ๊ฐ๊ฒฐํ JSX ์ฝ๋๋ฅผ ์์ฑํจ์ผ๋ก์จ createElement๋ฅผ ์๋์ผ๋ก ์ํํ ์ ์๊ฒ ๋์๊ณ , ์น ๋ฟ๋ง ์๋๋ผ ๋ชจ๋ฐ์ผ ์ฑ ๊น์ง ๊ฐ๋ฐํ ์ ์๊ฒ ๋์๋ค.
์ฐ๋ฆฌ๋ ์ธ์ ๋ ํ๊ทธ์ ์ด๋ฆ์ ์๋ก ์ง์ด ์ปดํฌ๋ํธ๋ฅผ ์ ์ํ ์ ์๋ค. ๊ทธ๋ฌ๋ ค๋ฉด ๊ธฐ๋ณธ ์ปดํฌ๋ํธ ์์๋ค์ ์ ์๊ณ ์์ด์ผ ํ๊ฒ ๋ค. HTML, React ์น, React Native์ ๊ธฐ๋ณธ ๋ด์ฅ ํ๊ทธ๊ฐ ๋์ผํ์ง๋ ์๋ค. ๊ธฐ๋ฅ์ด ์กฐ๊ธ์ฉ ๋ฌ๋ผ์ง์ ๋ฐ๋ผ ํ๊ทธ์ ์ด๋ฆ๋ ๋ฌ๋ผ์ก์ผ๋, ๊ทธ๊ฒ์ ๋น๊ตํ์ฌ ์์๋ณด๊ฒ ๋ค.
React Native Component
์ฐ์ React Native ๊ณต์ ๋ฌธ์์์ ๋ฐ์ทํ ์๋์ ์ด๋ฏธ์ง๋ฅผ ์ฐธ๊ณ ํด๋ณด์.
๋ค์ํ <View> ํ๊ทธ์ <Text> ํ๊ทธ, <Image> ํ๊ทธ๊ฐ ๊ธฐ๋ณธ ๋ค์ดํฐ๋ธ ์ปดํฌ๋ํธ๋ก ์ ๊ณต๋๊ณ ์๋ค๋ ๊ฒ์ ์ ์ ์๋ค. ๊ทธ๋ผ ์ด์ ์ด ์ปดํฌ๋ํธ๋ค์ด ์ฐ๋ฆฌ๊ฐ ๊ธฐ์กด์ ์๊ณ ์๋ HTML, React์ ๊ทธ๊ฒ๊ณผ ์ด๋ป๊ฒ ๋ฌ๋ผ์ก๋์ง, ๋ฌด์๊ณผ ๋น์ทํ์ง ๋น๊ตํ์ฌ ์์๋ณด๋๋ก ํ๊ฒ ๋ค.
์ผ๋ฐ์ ์ธ HTML, ์น ์์
<div>, <p>, <span>, <a>, <li>, <ul>, <ol>, <img> ๋ฑ
๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ ์ปดํฌ๋ํธ
<View>, <Image>, <Text>, <FlatList> ๋ฑ
HTML์ ์์์ ๋น์ทํ๊ฒ ๋งคํ๋๋ ๋ค์ดํฐ๋ธ ์ปดํฌ๋ํธ๋ฅผ ํ๋ก ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
HTML | React Native |
div | <View> |
img | <Image> |
span, p | <Text> |
ul/ol, li | <FlatList> |
<View>
๋ชจ๋ฐ์ผ ์ฑ UI์ ๊ฐ์ฅ ๊ธฐ๋ณธ ๋จ์๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. ์๊น ์์ ์ฌ์ง์์ ๋ณด์๋ฏ, ๋ชจ๋ ์ปดํฌ๋ํธ์ ์๋์๋ View๊ฐ ๊น๋ ค์๋ค.
๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ ๊ณต์ ๋ฌธ์์์๋ View๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ค๋ช ํ๊ณ ์๋ค.
View is a container that supports layout with flexbox, style, some touch handling, and accessibility controls. View๋ flexbox, style, ํฐ์น ๋ค๋ฃจ๊ธฐ์ ์ ๊ทผ์ฑ ์ ์ด์ ๊ฐ์ ๋ ์ด์์์ ์ง์ํ๋ ์ปจํ ์ด๋ ์ ๋๋ค. |
ํ๋ง๋๋ก ๋ชจ๋ฐ์ผ ์ฑ ๊ฐ ์์์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋จ์๋ผ๊ณ ๋ณผ ์ ์๋ค.
<Text>
ํ ์คํธ๋ฅผ ์ ๋ ฅํ ์ ์๋ ์ ์ผํ ์ปดํฌ๋ํธ์ด๋ค. HTML์์๋ <div>์ด๋ <p>์ด๋ ์ด๋์๋ ํ๋ ์ธ ํ ์คํธ๋ฅผ ์ ๋ ฅํ ์ ์์๋ค. ๊ทธ๋ฌ๋ ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ๋ฅผ ํฌํจํ ๋ชจ๋ฐ์ผ ์ฑ ๊ฐ๋ฐ์์๋ ์น๊ณผ ํ ์คํธ ๋ ๋๋ง ๋ฐฉ์์ด ๋ค๋ฅด๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ์์๋ ์์์์๋ก ํ๋ ์ธ ํ ์คํธ๋ฅผ ์ ๋ ฅํ ์ ์๋ ์ ์ผํ ์ปดํฌ๋ํธ๋ก <Text>๋ฅผ ๋ง๋ค์๋ค.
<Text> Right </Text>
<View> Wrong </View>
์์ ๊ฐ์ด Text ๋ด์๋ ์ผ๋ฐ ํ๋ ์ธ ํ ์คํธ๋ฅผ ์ ๋ ฅํ ์ ์์ง๋ง, ์ด๋ฅผ ์ ์ธํ View์ ๊ฐ์ ํ๊ทธ ๋ด์ ํ๋ ์ธ ํ ์คํธ๋ฅผ ์ ๋ ฅํ๋ค๊ฐ๋ ์ค๋ฅ๋ฅผ ๋ง์ดํ๊ฒ ๋ ๊ฒ์ด๋ค. ๋ง์ฝ <View> ๋ด์ ํ๋ ์ธ ํ ์คํธ๋ฅผ ์ ๋ ฅํ๊ณ ์ถ๋ค๋ฉด <View>์ ์์์์๋ก <Text>๋ฅผ ์ถ๊ฐํ์ฌ ๊ทธ ์์ ํ๋ ์ธ ํ ์คํธ๋ฅผ ์ ๋ ฅํด์ฃผ๋ฉด ๋๊ฒ ๋ค.
<Image>
Image๋ ์ฐ๋ฆฌ๊ฐ ์๊ณ ์๋ HTML์ <img> ํ๊ทธ์ ๋น์ทํ๋ค. source ์์ฑ์ ์ด๋ฏธ์ง ๊ฒฝ๋ก์ ํจ๊ป ์ ๋ ฅํ์ฌ ๋ถ๋ฌ์ฌ ์ ์๋ค. ๋ค๋ง ํ๊ฐ์ง ๋ค๋ฅธ ์ ์, HTML์์๋ css ์์ฑ์ผ๋ก background-image ๋ฅผ ์ด์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ํ๋์ ์์๊ฐ ์๋ ์์์ ์คํ์ผ ์์ฑ์ผ๋ก ์ง์ ํ ์ ์์๋๋ฐ ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ๋ ๊ทธ๋ ์ง ์๋ค๋ ๊ฒ์ด๋ค. ๋ฆฌ์กํธ์ ํต์ฌ์ ๋ชจ๋ ๊ฒ์ ์ปดํฌ๋ํธํ์ด๋ฏ๋ก, ์์์ ์์ฑ์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ์ง์ ํ์ง ์๋๋ค.
๋ง์ฝ ํ ์ปดํฌ๋ํธ์ ๋ฐฐ๊ฒฝ ์์ฑ์ผ๋ก์จ ์ด๋ฏธ์ง๋ฅผ ์ฝ์ ํ๊ณ ์ถ๋ค๋ฉด, ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋๋ค.
<Image style={{height:'100%',width:'100%',resizeMode:'cover'}}
source={require("์ด๋ฏธ์ง๊ฒฝ๋ก")}>
style ์์ฑ์ resizeMode๋ฅผ ์ด์ฉํ๋ฉด ์ด๋ฏธ์ง์ ๋น์จ์ ์ด๋ป๊ฒ ์ ์ฉํ ๊ฒ์ธ์ง ์ค์ ํ ์ ์๋ค.
์์ ์ด๋ฏธ์ง๋ก resizeMode์ ๊ฐ ์ต์ ์ ๋ํด ์ง๊ด์ ์ผ๋ก ์ ์ ์์ผ๋ฆฌ๋ผ๊ณ ์๊ฐํ๋ค.
Contain ์ ์ธ๋ก๋ ๊ฐ๋ก ๋ ์ค ํ๋๊ฐ 100%์ผ ๋ ๊น์ง๋ง ์์ ์ ๋น์จ๋ก ํ์ฅํ๋ ๊ฒ์ด๋ค.
Cover ๋ ๊ฐ๋ก์ ์ธ๋ก๊ฐ ๋ ๋ค 100% ์ด์์ด ๋ ๋ ๊น์ง ์์ ์ ๋น์จ๋ก ํ์ฅํ๋ ๊ฒ์ด๋ค.
Stretch ๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ์ ๋น์จ์ ๋ง์ถฐ ํ์ฅํ๋ ๊ฒ์ด๋ค.
์ค๋์ ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ ์ฑ ๊ฐ๋ฐ ๊ณต๋ถ 2์ผ์ฐจ๋ก ์์ ๊ฐ์ด ๊ฐ๋ฐ์ ์ฐฉ์ ํ๊ธฐ ์ ๊ธฐ๋ณธ์ ์ธ ์์๋ค๋ถํฐ ์์๋ณด์๋ค.
ํ์ดํ !
์ฐธ๊ณ ํ ์์ ์ https://iworldt.tistory.com/27 ์์ ์ ์ ์๋ค.
๋๊ธ