JSX๋?
JavaScript์์ XML์ ์ถ๊ฐํ ํ์ฅํ ๋ฌธ๋ฒ์ด๋ค.
XML(eXtensible Markup Language)์ ํ๊ทธ(tag, <>)์ ์ด๋ฆ์ ์์ ๋กญ๊ฒ ์ง๊ณ ์ฌ์ฉํ ์ ์๋ ๋ฌธ๋ฒ์ด๋ค. ์ด๋ฅผ JavaScript์ ์ ์ฉ ์ํจ ๊ฒ์ด ๋ฐ๋ก JSX์ด๋ค.
โ
์คํํ๊ธฐ ์ ์ ์ฝ๋๊ฐ ๋ฒ๋ค๋ง๋๋ ๊ณผ์ ์์ ๋ฐ๋ฒจ์ ์ฌ์ฉํ์ฌ ์ผ๋ฐ JavaScript ํํ์ ์ฝ๋๋ก ๋ณํ๋๋ค.
โ
* ๋ฐ๋ฒจ(Babel)
์ต์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์, Babel์ ํตํด ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ ์ ์๋ ๋ฌธ๋ฒ์ผ๋ก ๋ณํํด์ฃผ๋ ์ปดํ์ผ๋ฌ์ด๋ค. ์ด๊ธฐ์ ๋ฐ๋ฒจ์ ES6 ์ฝ๋๋ฅผ ES5 ์ฝ๋๋ก ๋ณํํด ์ฃผ๋ ์ผ๋ง ํ์ง๋ง, ํ์ฌ๋ ๋ฆฌ์กํธ์ JSX๋ฌธ๋ฒ๋ ์ฒ๋ฆฌํด์ค๋ค.
ํธ๋ ์คํ์ผ๋ฌ๋ ์์ค๋ฅผ ์ ๋ ฅ ๋ฐ์ผ๋ฉด ๋ค๋ฅธ ์์ค๋ก ๋ณํํ๋ ์ปดํ์ผ๋ฌ์ ์ผ์ข ์ด๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ๋ฌ๋ผ๊ณ ๋ถ๋ฅด๋ ๊ฒ์ ๋ฌธ์ ๊ฐ ๋์ง ์๋๋ค.
๋ฐ๋ฒจ ์งํ ๋จ๊ณ
1. ํ์ฑ(Parsing): ์ฝ๋๋ฅผ ์ฝ๊ณ ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ(AST)๋ก ๋ณํํ๋ ๋จ๊ณ
2. ๋ณํ(Transforming): ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ๋ฅผ ๋ณ๊ฒฝ
3. ์ถ๋ ฅ(Printing): ๋ณ๊ฒฝ๋ ๊ฒฐ๊ณผ๋ฌผ์ ์ถ๋ ฅ
โ
React native๋ JSX๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์์ํ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง, React๋ฅผ ์ฌ์ฉํ๋ ์ค์ํ ์ด์ ์ค ํ๋๊ฐ ’์ง๊ด์ ’์ด๋ค. JSX๋ฅผ ์ฌ์ฉํด์ ์ปดํฌ๋ํธ๋ฅผ ๊ตฌ์ฑํ๋๋ฐ ์ฝ๊ฒ ์ ์ํ ์ ์๋ค.
โ
* ๋ฆฌ์กํธ๋ฅผ ์ฌ์ฉํ๋ฉด์ ์ฝ๋๋ฅผ ๋ณด๊ณ ํ๋ฉด์ ์ด๋ค UI๊ฐ ๊ทธ๋ ค์ง์ง ์ถฉ๋ถํ ์์ ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ‘์ง๊ด์ ’์ด๋ผ๊ณ ํํํ๋ค.
JSX ๋ฌธ๋ฒ
1. ๋๋ฌ์ผ ๊ตฌ์กฐ
์ปดํฌ๋ํธ์ ์ฌ๋ฌ ์์๊ฐ ์๋ค๋ฉด ๋ฐ๋์ ๋ถ๋ชจ ์์ ํ๋๊ฐ ๊ฐ์ธ๋ ํํ์ฌ์ผ ํ๋ค. ์ปดํฌ๋ํธ ๋ด๋ถ๋ ํ๋์ DOMํธ๋ฆฌ ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ ธ ์์ด์ผํ๋ค๋ ๊ท์น ๋๋ฌธ์ด๋ค.
// ์๋ฌ
return(
<Text>ํ
์คํธ1</Text>
<Text>ํ
์คํธ2</Text>
)
// ๋ฐ๊นฅ์ View๋ก ๊ฐ์ผ ๋ชจ์ต
return(
<View>
<Text>ํ
์คํธ1</Text>
<Text>ํ
์คํธ2</Text>
</View>
)
2. ๋ณ์ ์ฐธ์กฐ
JSX ์์์๋ ์๋ฐ์คํฌ๋ฆฝํธ ํํ์์ ์ฌ์ฉํ ์ ์๋ค. JSX ๋ด๋ถ์์ { }๋ก ๋ ๋๋งํ๋ฉด ๋๋ค.
const name = '๋ฆฌ์กํธ';
return (
<View>
// ๋ ๋๋ง // ๋ฆฌ์กํธ
<Text>{name}</Text>
// name
<Text>name</Text>
</View>
);
3. if๋ฌธ ๋์ ์กฐ๊ฑด๋ถ ์ฐ์ฐ์
JSX ๋ด๋ถ์ ์๋ฐ์คํฌ๋ฆฝํธ ํํ์ ๋ด์์ if๋ฌธ์ ์ฌ์ฉํ ์ ์์ด์, ์กฐ๊ฑด๋ถ ์ฐ์ฐ์(์ผํญ ์ฐ์ฐ์)๋ฅผ ์ฌ์ฉํ๋ค.
for๋ฌธ ๋์ map(), else if๊ณผ switch๋ฌธ ๋์ ์ค์ฒฉ ์กฐ๊ฑด๋ถ ์ฐ์ฐ์,
==์ ๊ฐ๋ง ๊ฐ์ผ๋ฉด true์ด์ง๋ง, ===์ ๊ฐ์ ํ์ ๊น์ง ๋ชจ๋ ๊ฐ์์ง ๋น๊ตํ๋ค.
* Map()์ด๋
๊ฐ๋จํ ํค์ ๊ฐ์ ์๋ก ์ฐ๊ฒฐ(๋งคํ) ์์ผ ์ ์ฅํ๋ฉฐ ์ ์ฅ๋ ์์๋๋ก ๊ฐ ์์๋ค์ ๋ฐ๋ณต์ ์ผ๋ก ์ ๊ทผํ ์ ์๋๋ก ํ๋ค.
๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ: ๊ฐ ๋ฐฐ์ด์ ์์๋ฅผ ๋๋ฉด์ ์ธ์๋ก ์ ๋ฌ๋ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฒ๋ฆฌ ๋ ์๋ก์ด ๊ฒฐ๊ณผ๋ฅผ ์๋ก์ด ๋ฐฐ์ด์ ๋ด์ ๋ฐํํ๋ ํจ์์ด๋ค.
const name = '๋ฆฌ์กํธ';
return (
<View>
{name === '๋ฆฌ์กํธ' ? <Text>๋ฆฌ์กํธ</Text> : <Text>๋ฆฌ์กํธ๊ฐ ์๋</Text> }
</View>
);
4. AND ์ฐ์ฐ์(&&)๋ฅผ ์ฌ์ฉํ ์กฐ๊ฑด๋ถ ๋ ๋๋ง
&& ์ฐ์ฐ์๋ ์ฐธ์ผ ๊ฒฝ์ฐ์๋ง ์ํํ๊ณ , ๊ฑฐ์ง์ผ ๊ฒฝ์ฐ์ ์๋ฌด ์ก์ ๋ ์ทจํ์ง ์๋๋ค.
(else๋ฌธ์ด ์๋ ์กฐ๊ฑด๋ฌธ์ด๋ผ๊ณ ์๊ฐํ ์ ์๋ค.)
const name = “react”;
return (
<View>
{ name === “๋ฆฌ์กํธ” ? <Text>๋ง์</Text> : null } // ์ผํญ ์ฐ์ฐ์
</View>
{/* or (๋ ์งง๊ฒ) */}
<View>
{ name === “๋ฆฌ์กํธ” && <Text>๋ง์</Text> }
</View>
);
5. ์ธ๋ผ์ธ ์คํ์ผ๋ง
HTML์์ ์คํ์ผ์ ์ง์ ํ ๋ background-color์ ๊ฐ์ด ํ์ง๋ง, JSX์์๋ -๋ฅผ ์์ ๊ณ ์นด๋ฉ ํ๊ธฐ๋ฒ์ผ๋ก ์์ฑํ๋ค.
// ์:background-color -> backgroundColor
const style = {
backgroundColor: 'white',
fontSize: '10px',
fontWeight: 'bold'
}
return (
<View style={style}>
<Text>ํ
์คํธ</Text>
</View>
)
6. class ๋์ className
JSX๊ฐ ๋ ๋๋ง ๋ ๋ JSX์ ClassName ์์ฑ์ ์๋์ผ๋ก class ์์ฑ์ผ๋ก ๋ ๋๋ง ํ๋ค.
className์ด ์๋ class๋ก ์ค์ ํด๋ ์คํ์ผ์ด ์ ์ฉ๋์ง๋ง console์ ๊ฒฝ๊ณ ๊ฐ ๋ํ๋๋ค.
(๋ฆฌ์กํธ v16 ์ด์๋ถํฐ๋ class๋ฅผ className์ผ๋ก ๋ณํ์์ผ ์ฃผ๊ณ ๊ฒฝ๊ณ ๋ฅผ ๋์ด๋ค.)
CSS class๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด className ์์ฑ์ ์ฌ์ฉํด์ผ ํ๋ค. ์ด๋ ์ผ๋ฐ์ ์ธ ๋ชจ๋ DOM ์์๋ค์ ์ ์ฉ๋๋ค.
const name = “๋ฆฌ์กํธ”;
return (
<View>
<Text className = “react”>
{name}</Text>
</View>
)
7. ๊ผญ ๋ซ์์ผ ํ๋ ํ๊ทธ
JSX์์๋ ํ๊ทธ๋ฅผ ๋ซ์ง ์์ผ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ๋ซ๋ ํ๊ทธ๊ฐ ์์ผ๋ฉด ์ปดํ์ผ ์กฐ์ฐจ ๋์ง ์๋๋ค.
<View></View>
<View /> //self-colsing ํ๊ทธ
'๐ Development > React Native' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React Native] Props ๋? ์์ (0) | 2023.06.15 |
---|---|
React Native ์ปดํฌ๋ํธ๋? / ํด๋์คํ ์ปดํฌ๋ํธ์ ํจ์ํ ์ปดํฌ๋ํธ์ ํน์ง (0) | 2023.06.15 |
React Native ๊ธฐ๋ณธ ์ฝ๋(Hellow World ์คํ ํ๋ฉด ์ถ๋ ฅํ๊ธฐ) (0) | 2023.06.15 |
React Native์ ์๋ ์๋ฆฌ (0) | 2023.06.15 |
React Native์ ํน์ง ๋ฐ ์ฅ์ / ํ์ฉ (0) | 2023.06.15 |