1. JSX ๋?
- Introduction to JSX
- HTML ์ฝ๋๋ฅผ JSX ์ฝ๋๋ก ๋ณํํด์ฃผ๋ ์ฌ์ดํธ
- JSX
- ์๋ฐ์คํฌ๋ฆฝํธ ํ์ฅ ๋ฌธ๋ฒ
- .js ํ์ผ์์ ์ฐ๋ HTML ๋์ฉํ
- ์ ์ฐ๋
- ๊ฐ๋ ์ฑ ๋๊ณ ์ฝ๋ ์์ฑํ๊ธฐ ์ฌ์์
- JSX๋ ๊ณต์์ ์ธ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ด ์๋
- Babel์์๋ ์ฌ๋ฌ ๋ฌธ๋ฒ์ ์ง์ํ ์ ์๋๋ก preset ๋ฐ plugin์ ์ค์
- Babel์ ํตํด ๊ฐ๋ฐ์๋ค์ด ์์๋ก ๋ง๋ ๋ฌธ๋ฒ, ํน์ ์ฐจ๊ธฐ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฌธ๋ฒ๋ค์ ์ฌ์ฉ ๊ฐ๋ฅ
๐ก .js vs .jsx
React ๋๋ React Native ํ๋ก์ ํธ๋ฅผ ํ ๋ .js ํ์ฅ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ์๊ณ .jsx ํ์ฅ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ์์
- ์คํ์ค๋ฒํ๋ก์ฐ js vs jsx
- .js์ .jsx์ ํ์ฅ์๋ก์์ ์ฐจ์ด๋ ์๋ค๊ณ ํจ
- React ์ฝ๋๋ฅผ JS๋ก ๋ฐ๊พธ๋ ๊ณผ์ ์์ JSX๋ค์ ํ์ค์ ์ธ js ํ์ผ๋ก ๋ฐ๊ฟ
- ๋ ์ค ํ๋ ๊ณจ๋ผ์ ์ผ๊ด๋ ๋ฐฉ๋ฒ์ผ๋ก ํ์ฅ์๋ฅผ ์ฐ๊ธฐ
2. JSX ๋ฌธ๋ฒ
2.1 ๊ฐ์ธ์ธ ์์
์ปดํฌ๋ํธ์ ์ฌ๋ฌ ์์๊ฐ ์๋ค๋ฉด ๋ฐ๋์ ๋ถ๋ชจ ์์ ํ๋๋ก ๊ฐ์ธ์ผ ํจ
1import React from 'react'2function App() {3// ์ฌ๋ฌ ์์๊ฐ ์๋ค๋ฉด ๋ฐ๋์ ๋ถ๋ชจ ์์(div) ํ๋๋ก ๊ฐ์ธ์ผ ํ๋ค.4return (5<div>6<h1>๋ญ์๊ธฐ</h1>7<h2>์ ์๊ธฐ</h2>8</div>9)10}1112export default App
๋ถ๋ชจ ์์์ div ์ฌ์ฉํ๊ธฐ ์ซ์ผ๋ฉด? React v16๋ถํฐ ๋์
๋ Fragment ๊ธฐ๋ฅ ์ฐ์
1function App() {2// ๋ง๋ ํ ๊ฐ์ ์์๋ฅผ ์๊ฐ์๋๋ฉด, Fragment3return (4<Fragment>5<h1>๋ญ์๊ธฐ</h1>6<h2>์ ์๊ธฐ</h2>7</Fragment>8)9}
1function App() {2// Fragment๋ ๋ค์์ฒ๋ผ ์๋ต ๊ฐ๋ฅ3return (4<>5<h1>๋ญ์๊ธฐ</h1>6<h2>์ ์๊ธฐ</h2>7</>8)9}
2.2 HTML์ JS ํํ : ๋ก ํํ
1function App() {2const name = '๋ฆฌ์กํธ'3return (4<>5{/* {}๋ก ๊ฐ์ธ์ ํํ */}6<h1>Hello {name}</h1>7</>8)9}
๋ฐ์ดํฐ๋ฐ์ธ๋ฉ: ๋ณ์์ ์๋๊ฑธ HTML์ ๊ฝ์๋ฃ๋ ๊ฒ
2.3 if๋ฌธ ๋์ ์ผํญ ์ฐ์ฐ์
- JSX ๋ด๋ถ์ ์๋ฐ์คํฌ๋ฆฝํธ ํํ์์์ if๋ฌธ์ ์ฌ์ฉ ๋ชปํจ
- ๋์ ์ผํญ์ฐ์ฐ์์ ์ฌ์ฉํ๋ฉด ๋จ
1function App() {2const name = '๋ฆฌ์กํธ'3return <div>{name === '๋ฆฌ์กํธ' ? <h1>๋ฆฌ์กํธ</h1> : <h1>๋ฆฌ์กํธ ์๋</h1>}</div>4}
2.4 for๋ฌธ ๋์ map()
- JSX ๋ด๋ถ์ ์๋ฐ์คํฌ๋ฆฝํธ ํํ์์์ for๋ฌธ์ ์ฌ์ฉ ๋ชปํจ
- ๋์ **map()**์ ์ฌ์ฉํ๋ฉด ๋จ
1let array = [2, 3, 4]23array.map(Element => {4console.log(Element) // 2, 3, 45})
JSX์์ HTML์ ๋ฐ๋ณต ์์ฑํ๊ณ ์ถ์ผ๋ฉด, ๋ค์์ฒ๋ผ ์ฌ์ฉ
1function App() {2// `<div>์๋ </div>`์ด 3๊ฐ ์์ฑ๋จ3return (4<div>5{[1, 2, 3].map(function () {6return <div>์๋ </div>7})}8</div>9)10}
๋ง์ฝ ์ผ๋ฐ for๋ฌธ ์ธ๋ ค๊ณ ํ๋ฉด, ๋ค์์ฒ๋ผ ์ธ ์๋ ์์ง๋ง, ๊ท์ฐฎ์ผ๋ map์ด ์ข์
1function App() {2let arr = []3for (let i = 0; i < 3; i++) {4arr.push(<div>์๋ </div>)5}6return <div>{arr}</div>7}
2.5 AND ์ฐ์ฐ์๋ก ์กฐ๊ฑด๋ถ ๋ ๋๋ง
- ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ ๋๋ง ๋ด์ฉ์ ๋ณด์ฌ์ฃผ๊ณ , ๋ง์กฑํ์ง ์์ ๋๋ ์๋ฌด๊ฒ๋ ๋ ๋๋ง์ํ ๋,
AND ์ฐ์ฐ์(&&)๋ฅผ ์ฌ์ฉํด์ ์กฐ๊ฑด๋ถ ๋ ๋๋ง ๊ฐ๋ฅ
1function App() {2const name = '๋ฆฌ์กํธ ์๋'3// name์ด '๋ฆฌ์กํธ'์ด๋ฉด, <h1>๋ฆฌ์กํธ์ ๋๋ค.</h1>์ด๊ฑฐ ๋ณด์ฌ์ฃผ๊ณ4// name์ด ๋ค๋ฅธ ๊ฑฐ๋ผ๋ฉด, null ๋ฐํํ์ 5return <div>{name === '๋ฆฌ์กํธ' && <h1>๋ฆฌ์กํธ์</h1>}</div>67// ์ ๋ฌธ๋ฒ๊ณผ ๊ฐ์ ๋ฌธ๋ฒ8// return <div>{name === '๋ฆฌ์กํธ' ? <h1>๋ฆฌ์กํธ์ ๋๋ค.</h1> : null}</div>;9}
2.6 OR ์ฐ์ฐ์๋ก undefined ๋ ๋๋ง ์ํ๊ธฐ
OR(||) ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ดundefined์ผ ๋, ์ค๋ฅ๋ฅผ ๋ฐฉ์ง ๊ฐ๋ฅ
1function App() {2const name = undefined3// ๊ฐ์ด undefined๋ผ์ ์ค๋ฅ๊ฐ ๋ ๋, ์ค๋ฅ ์ฒ๋ฆฌํ ๋4return name || '๊ฐ์ด undefined์'5}
2.7 ์ธ๋ผ์ธ ์คํ์ผ๋ง
- React์์ DOM ์์ ์คํ์ผ ์ ์ฉํ ๋๋, ๋ฌธ์์ด์ด ์๋ ๊ฐ์ฒด ํํ๋ก ๋ฃ์ด์ผ ๋จ
background-color์ฒ๋ผ-๋ฌธ์๊ฐ ํฌํจ๋๋ ์ด๋ฆ์์นด๋ฉ ํ๊ธฐ๋ฒ(camelCase)์ผ๋ก ์์ฑ- JS์์ -๋ฅผ ์ซ์ -๋ก ์ธ์ํด์ ์นด๋ฉํ๊ธฐ๋ฒ ์ฌ์ฉํ๋ ๊ฒ์
background-color๋backgroundColor๋ก
1function App() {2const style = {3backgroundColor: 'black',4color: 'aqua',5fontSize: '48px', // font-size -> fontSize6}7return <div style={style}> ๊ธ์จ </div>8}
๋๋
1<div style={{ color: 'blue', fontSize: '30px' }}> ๊ธ์จ </div>
2.8 HTML์ class ๋์ className
- HTML์ class๋ช
์
class=" "๊ฐ ์๋๋ผclassName=" "์ด๋ ๊ฒ ์ - ์๋ํ๋ฉด -๋ฅผ ์ซ์ -๋ก ์ธ์ํด์ ์นด๋ฉํ๊ธฐ๋ฒ์ผ๋ก ์์ฑํ๋ ๊ฒ์ฒ๋ผ,
- JS์์ ์ฌ์ฉํ๋ ์์ฝ์ด์ธ
class๋ผ๋ ํค์๋๊ฐ ์์ด ๊ตฌ๋ถํ๊ธฐ ์ํด์className์ด๋ผ๊ณ ์
1function App() {2// class๊ฐ ์๋๋ผ className ์ฌ์ฉ3return <div className="react">๊ธ์จ</div>4}
2.9 ์ฃผ์
1function App() {2// ์ฌ๊ธฐ ์ฃผ์์ ์ด๋ ๊ฒ ์3return (4<>5{/* ์ฃผ์์ ์ด๋ ๊ฒ ์ */}6<div className="react">๊ธ์จ</div>7</>8)9}