1. JSX
1. JSX๋?
JSX is an XML-like syntax extension to ECMAScript JSX๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ํ XML๊ฐ์ ๋ฌธ๋ฒ ํ์ฅ ์๋ฐ์คํฌ๋ฆฝํธ์ HTML์ ํฉ์ณ์ ์ฌ์ฉํ ์ ์๋ ๋ฌธ๋ฒ
๐งบ JSX๋ React์ ๋ถ์ฐ๋ฌผ
JSX๋ React๋ฅผ ๋ง๋ค๋ฉด์ ๋์จ ๋ถ์ฐ๋ฌผ ๊ฐ์ ๊ฒ์ด์ง๋ง, React๋ฅผ ์ฌ์ฉํ ๋ ํ์๋ ์๋ ๋ํ ๊ผญ ๋ฆฌ์กํธ์์๋ง ์ฌ์ฉํด์ผ ํ๋ ๊ฒ๋ ์๋ (Ex. Vue.js ๋ฑ ๋ค๋ฅธ ํ๋ ์์ํฌ์์๋ ์ฌ์ฉ ๊ฐ๋ฅ) ์ฐธ๊ณ ๋ก, ๊นํ๋ธ์ ํ ์คํธ ์๋ํฐ ์ํฐ์ ๋ถ์ฐ๋ฌผ์ธ ์ผ๋ ํธ๋ก ์ผ๋ก ๋ง์ดํฌ๋ก์ํํธ๋ VS code๋ฅผ ๋ง๋ฆ
JSX ๋ฌธ๋ฒ
ํ๊ทธ ๋ซ๊ธฐ
์ฌ๋ ํ๊ทธ์ ๋ซ๋ ํ๊ทธ๊ฐ ํ์ ๋ซ๋ ํ๊ทธ๊ฐ ์์ ๊ฒฝ์ฐ, self closing tag ์ฌ์ฉ : </>
์ต์์ ํ๊ทธ
Fragments ๊ฐ์ฅ ๋ฐ๊นฅ์ ์์นํ๋ ํ๊ทธ ํ์ ๋ ธ๋๊ฐ ์๋ ๊ฒฝ์ฐ ๋ฌถ์ด์ค์ผ ํจ : <>๋๋ <React.Fragment>๋ก ๋ฌถ์ด์ค
์กฐ๊ฑด๋ถ ๋ ๋๋ง
์ผํญ ์ฐ์ฐ์ (์กฐ๊ฑด์) ? (์ฐธ ํํ์) : (๊ฑฐ์ง ํํ์)
์ค๊ดํธ {} ์ด์ฉ
์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ ์ฌ์ฉํ๋ ค๋ฉด ์ค๊ดํธ ์ด์ฉ
JavaScript ์ฝ๋์ 1:1 ๋งค์นญ
JSX๋ XML์ฒ๋ผ ์์ฑ๋ ๋ถ๋ถ์ React.createElement์ ์ฐ๋ JavaScript ์ฝ๋๋ก ๋ณํ ์ค๊ดํธ๋ฅผ ์จ์ JavaScript ์ฝ๋๋ฅผ ๊ทธ๋๋ก ์ธ ์ ์๊ณ , ๊ฒฐ๊ตญ์ JavaScript ์ฝ๋์ 1:1๋ก ๋งค์นญ
๐ผ Babel
๋ณํ๊ธฐ Babel ๋ก ํ์ธ ๊ฐ๋ฅ
Presets
์์react
๋ฅผ ์ฒดํฌํ๊ฑฐ๋,Plugins
์์@babel/plugin-transform-react-jsx
๋ฅผ ์ถ๊ฐํ๋ฉด JSX๋ฅผ ์คํํ ์ ์์ JSX ํ์ผ์/* @jsx ์ํ๋ ๋ด์ฉ */
์ฃผ์์ ์ถ๊ฐํ๋ฉด React.createElement ๋์์ํ๋ ๋ด์ฉ
์ ์ธ ์ ์์ โ ๋ฆฌ์กํธ๊ฐ ์๋ ๋ค๋ฅธ ๋ฌด์ธ๊ฐ๋ฅผ ๋ง๋ค ๋ ์ฌ์ฉ
Babel ๋ณํ ์์ (JSX โ JavaScript)
Ex.1
<p>
ํ๊ทธ ์์ ์์ฑ์ด ์๊ธฐ ๋๋ฌธ์ null
Ex.2
<Greeting>
ํ๊ทธ ์๋์ ๊ฐ์ด ์๊ธฐ ๋๋ฌธ์ ์ธ๋ฒ์งธ ์ธ์๊ฐ ์์<Greeting>
์ ์ฌ์ฉ์ ์ ์ ์ปดํฌ๋ํธ์ด๊ธฐ ๋๋ฌธ์ "Greeting"์ด ์๋ Greeting ์ผ๋ก ํ๊ธฐ์ฌ์ฉ์๊ฐ ์ ์ํ๊ฑฐ๋ importํ ์ปดํฌ๋ํธ
Ex.3
์ต์์ ํ๊ทธ fragment๊ฐ ์๋ ๊ฒฝ์ฐ ์ค๋ฅ ๋ฐ์
add(1, 2) add(3, 4)
์ ๊ฐ์ ์ํฉ;
๋๋,
๋ก ๊ตฌ๋ถํด์ค์ผ ํจ
Ex.4
๊ณต๋ฐฑ์ ๋ฃ์ด์ฃผ๊ณ ์ถ์ ๊ฒฝ์ฐ์๋
{' '}
๋ฅผ ๋ฃ๊ธฐ๋ ํจ
2. React์์ JSX๋ฅผ ์ฌ์ฉํ๋ ๋ชฉ์
Babel, JSX, ๊ทธ๋ฆฌ๊ณ ๋น๋ ๊ณผ์ ๋ค JSX ์ดํดํ๊ธฐ
JSX๋ React.createElement๋ฅผ ์ฐ๋๋ก JS ์ฝ๋๋ฅผ ๋ฐ๊ฟ์ฃผ๋ ๊ฒ ๋ณํ๋ JS ์ฝ๋๋ Virtual DOM ํธ๋ฆฌ๋ฅผ ๋ฐ๊ฟ์ฃผ๊ณ , ๊ทธ๊ฒ๊ณผ ํ๋ฉด์ ๋น๊ตํด์ ๋ฐ๋ ๋ถ๋ถ๋ง ์ ๋ฐ์ดํธ(์ฌ์กฐ์ ๊ณผ์ ) ๐ก ์ด ์ ๊ทผ๋ฐฉ์์ ํตํด React์ ์ ์ธ์ API๋ฅผ ๊ฐ๋ฅํ๊ฒ ๋ง๋ฆ
3. Syntactic sugar
๊ฐ JSX ์๋ฆฌ๋จผํธ๋ React.createElement(component, props, ...children)๋ฅผ ํธ์ถํ๊ธฐ ์ํ ๋ฌธ๋ฒ ์คํ ๊ทธ๋์ JSX๋ก ํ ์ ์๋ ๋ชจ๋ ๊ฒ์ ์์ JavaScript๋ก๋ ๊ฐ๋ฅ
์ฌ๋ฌผ์ ๋ ์ฝ๊ฒ ํํํ ์ ์๋๋ก ์ค๊ณ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๋ด์ ๊ตฌ๋ฌธ ๋ ๋ช ํํ๊ณ ๊ฐ๊ฒฐํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๋์ฒดํ์ฌ ํํํ๋ ์คํ์ผ ๋ ์งง๊ณ ์ฝ๊ณ ์ฐ๊ธฐ๊ฐ ์ฌ์ ๐ก JSX๋ฅผ ์์ JavaScript๋ง์ผ๋ก๋ ํํํ ์ ์์ง๋ง, ๋ ๊ธธ๊ณ ๋ณต์กํ๊ธฐ ๋๋ฌธ์ JSX๋ฅผ ์ฌ์ฉ
4. React.createElement
createElement JSX ์์ด ์ฌ์ฉํ๋ React
๋ฆฌ์กํธ ๋ค์์คํ์ด์ค
๋ค์์คํ์ด์ค : ๋ด๋ถ ์๋ณ์(ํ์, ํจ์, ๋ณ์ ๋ฑ์ ์ด๋ฆ)์ ๋ฒ์๋ฅผ ์ ๊ณตํ๋ ์ ์ธ์ ์์ญ
createElement()๋ React ์๋ฆฌ๋จผํธ๋ฅผ ์์ฑํ์ฌ ๋ฐํ
type ์ธ์๋ก๋ 1๏ธโฃ ํ๊ทธ ์ด๋ฆ ๋ฌธ์์ด
('div', 'span' ๋ฑ), 2๏ธโฃ React ์ปดํฌ๋ํธ ํ์
, 3๏ธโฃ React Fragment ํ์
์ค ํ๋๊ฐ ์ฌ ์ ์์
JSX ์์ด JavaScript ์ฌ์ฉํ๊ธฐ
๋น๋ ํ๊ฒฝ์์ ์ปดํ์ผ ์ค์ ์ ํ๊ณ ์ถ์ง ์์ ๋, JSX ์์ด React๋ฅผ ์ฌ์ฉ
ํ๋ ๊ฒ์ ํนํ ํธ๋ฆฌ
JSX ํ์ผ์ ๋ณํ์ด ํ์ํ๊ธฐ ๋๋ฌธ์, ๋ณํํ๊ณ ์ถ์ง ์์ผ๋ฉด ๊ทธ๋ฅ JavaScript ํ์ผ์ ์ฌ์ฉํ ์ ์์
JSX๋ก ์์ฑ๋ ์ฝ๋๋ React.createElement() ํํ๋ก ๋ณํ โ JSX๋ก ํ ์ ์๋ ๋ชจ๋ ๊ฒ์ ์์ JavaScript๋ก๋ ๊ฐ๋ฅ
React.createElement๋ฅผ ์งง์ ๋ณ์์ ํ ๋นํด JSX ์์ด React ์ฌ์ฉํ๊ธฐ
5. React Element
์๋ฆฌ๋จผํธ๋ React ์ฑ์ ๊ฐ์ฅ ์์ ๋จ์ ํ๋ฉด์ ํ์ํ ๋ด์ฉ์ ๊ธฐ์
createElement๋ก React Element ํธ๋ฆฌ ๊ฐฑ์ ํ๊ธฐ
JSX ๋์ React.createElement๋ฅผ ์ฌ์ฉํด์ React Element ํธ๋ฆฌ๋ฅผ ๊ฐฑ์ ํ ์ ์์ React.createElement๋ DOM tree์์ node๋ฅผ ๋ง๋๋ ๊ฒ๊ณผ ๋น์ทํ๋ฉฐ, ๋์ ์๋ฆฌ๋จผํธ๋ฅผ ์์ฑ
๐ DOM ์๋ฆฌ๋จผํธ์ React ์๋ฆฌ๋จผํธ
๋ธ๋ผ์ฐ์ DOM ์๋ฆฌ๋จผํธ์ ๋ฌ๋ฆฌ, React ์๋ฆฌ๋จผํธ๋ ์ผ๋ฐ ๊ฐ์ฒด์ด๋ฉฐ(plain object) ์ฝ๊ฒ ์์ฑ ๊ฐ๋ฅ React DOM์ React ์๋ฆฌ๋จผํธ์ ์ผ์นํ๋๋ก DOM์ ์ ๋ฐ์ดํธ
JSX Runtime์ _jsx๋ ํจ์๋ฅผ, Preact๋ h๋ ํจ์๋ฅผ ์ง์ ์ง์
6. React StrictMode
StrictMode๋ ์์๋ค์ ๋ํ ๋ถ๊ฐ์ ์ธ ๊ฒ์ฌ์ ๊ฒฝ๊ณ ๋ฅผ ํ์ฑํ ๊ฐ๋ฐ ๋ชจ๋์์๋ง ํ์ฑํ๋๊ธฐ ๋๋ฌธ์, ํ๋ก๋์ ๋น๋์๋ ์ํฅ์ ๋ผ์น์ง ์์
์์ ํ์ง ์์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ์ปดํฌ๋ํธ ๋ฐ๊ฒฌ
๋ ๊ฑฐ์ ๋ฌธ์์ด ref ์ฌ์ฉ์ ๋ํ ๊ฒฝ๊ณ
๊ถ์ฅ๋์ง ์๋ findDOMNode ์ฌ์ฉ์ ๋ํ ๊ฒฝ๊ณ
์์์น ๋ชปํ ๋ถ์์ฉ ๊ฒ์ฌ
๋ ๊ฑฐ์ context API ๊ฒ์ฌ
Ensuring reusable state
StrictMode ํ์ฑํ
<App />
์ปดํฌ๋ํธ ๊ฐ๊ฐ์ ์์๊น์ง ๊ฒ์ฌ๊ฐ ์ด๋ฃจ์ด์ง
โ ๏ธ Ex. useEffect ๋ฑ์ ์ฌ์ฉํ ๋ ์ฝ์์ ๋ ๋ฒ์ฉ ํธ์ถํ๋ ๊ฒฝ์ฐ ๋ ๋ฒ ์ฒดํฌํด์ ๋ ๊ฒฐ๊ณผ๊ฐ ๋ค๋ฅผ ๊ฒฝ์ฐ ํจ์์ ์ฌ์ด๋์ดํํธ๊ฐ ํฌ๋ค๊ณ ๊ฒฝ๊ณ
React Developer Tools
์ปดํฌ๋ํธ๊ฐ StrictMode ํ์ฑํ ๋์ด์์ง ์์ผ๋ฉด ๊ฒฝ๊ณ
๋ด๋ถ์ ์ผ๋ก VDOM ํธ๋ฆฌ๋ฅผ ๋น์ทํ๊ฒ ๋ณด์ฌ์ค
7. VDOM(Virtual DOM)
๐ณ ํธ๋ฆฌ๋ ํ๋ํ๊ณผ ๊ฐ์(์ฌ๊ท์ ), ํธ๋ฆฌ์ ๊ตฌ์ฑ์์๋ ํธ๋ฆฌ ๋งค๋ฒ ์์ React Element ํธ๋ฆฌ, VDOM ํธ๋ฆฌ๊ฐ ์์ฑ๋จ
VDOM์ UI์ ์ด์์ , ๊ฐ์์
์ธ ํํ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๊ณ , ReactDOM๊ณผ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ํด ์ค์
DOM๊ณผ ๋๊ธฐํํ๋ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋
ํน์ ๊ธฐ์ ์ด๋ผ๊ธฐ๋ณด๋ค๋ ํจํด์ ๊ฐ๊น์
React์์ virtual DOM
์ด๋ผ๋ ์ฉ์ด๋ ๋ณดํต ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๋ํ๋ด๋ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ React elements์ ์ฐ๊ด๋จ
VDOM์ ์ฐ๋ ์ด์
์ถฉ๋ถํ ๋น ๋ฆ - ์๋๋ฅผ ๋ด์ธ์ธ ์ ๋๋ก ๋งค์ฐ ๋น ๋ฅธ ๊ฒ์ ์๋์ง๋ง, ์ถฉ๋ถํ ๋น ๋ฆ
์ ์ง๋ณด์ ์ฉ์ด (ํต์ฌโจ) - ์์ธก ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์ ์ง๋ณด์๊ฐ ์ฉ์ด
Virtual DOM
Virtual DOM์ ๋ธ๋ผ์ฐ์ API ์์ ์๋ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๊ตฌํ๋๋ ๊ฐ๋ ์ด์ ์ DOM Tree์ ๋น๊ตํด์ ์ค์ง์ ์ผ๋ก ์ด๋ค ๋ถ๋ถ์ด ์ ๋ฐ์ดํธ ๋ผ์ผ ํ๋์ง ๊ณ์ฐํด์ ํ์ํ ๋ถ๋ถ๋ง DOM Tree์ ์ ๋ฐ์ดํธ ( = ์ฌ์กฐ์ ) ๋ ๋๋ง ์ ํ์ ๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง์ ์ ์ฉ ๋ณํ๋ JS ์ฝ๋๋ Virtual DOM ํธ๋ฆฌ๋ฅผ ๋ฐ๊ฟ์ฃผ๊ณ , ๊ทธ๊ฒ๊ณผ ํ๋ฉด์ ๋น๊ตํด์ ๋ฐ๋ ๋ถ๋ถ๋ง ์ ๋ฐ์ดํธ โ render ํจ์๊ฐ ๋ง์ด ํธ์ถ๋์ด๋ ์ฑ๋ฅ์ ํฌ๊ฒ ๊ฑฑ์ ํ์ง ์์๋ ๋๋ ์ด์
๋ฆฌ์กํธ ์ปดํฌ๋ํธ๊ฐ ๋ฉ๋ชจ๋ฆฌ ์์ ๋ณด๊ด
60fps๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณด์ฅ
DOM
DOM(Document Object Model) DOM์ ์ ํํ ๋ฌด์์ผ๊น?
์น ํ์ด์ง์ ๋ํ ์ธํฐํ์ด์ค ๋ทฐ ํฌํธ์ ๋ฌด์์ ๋ ๋๋ง ํ ์ง ๊ฒฐ์ ํ๊ธฐ ์ํด ์ฌ์ฉ ์ฌ๋ฌ ํ๋ก๊ทธ๋จ๋ค์ด ํ์ด์ง์ ์ฝํ ์ธ ๋ฐ ๊ตฌ์กฐ, ์คํ์ผ์ ์ฝ๊ณ ์กฐ์ํ ์ ์๋๋ก API๋ฅผ ์ ๊ณต ๐ณ ๋ธ๋ผ์ฐ์ ๊ฐ HTML ํ์ผ์ ์ฝ์ผ๋ฉด์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ ์ ์๋ ์ค๋ธ์ ํธ ํธ๋ฆฌ(DOM ํธ๋ฆฌ)๋ก ๋ณํ
DOM vs HTML
DOM์ ์๋ณธ HTML ๋ฌธ์์ ๊ฐ์ฒด ๊ธฐ๋ฐ ํํ ๋ฐฉ์ ๋์ ์๋ก ๋น์ทํ์ง๋ง, ์ฐจ์ด ์กด์ฌ
HTML ๋ฌธ์ : ๋ด์ฉ๊ณผ ๊ตฌ์กฐ๊ฐ ๋จ์ ํ ์คํธ๋ก ๊ตฌ์ฑ
DOM : HTML ๋ฌธ์์ ๋ด์ฉ๊ณผ ๊ตฌ์กฐ๊ฐ ๊ฐ์ฒด ๋ชจ๋ธ๋ก ๋ณํ๋์ด, ๋ค์ํ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉ๋ ์ ์์
DOM๊ณผ Virtual DOM์ ์ฐจ์ด
fragment๋ DOM์ ์์ (DOM tree์ ๋ํ๋์ง ์์) Vue์ template์ด ๊ทธ๋๋ง ๋น์ทํ๊ณ , Vue์์ ์ ๊ทน์ ์ผ๋ก ํ์ฉ๋จ
๐ ์ค๋ฒจํธ์ ๊ฒฝ์ฐ Virtual DOM ์์ด๋ ๋๋ค, Virtual DOM์ ์ด๋ค๊ณ ๋นจ๋ผ์ง๋ ๊ฒ์ ์๋๋ค.
8. Reconciliation(์ฌ์กฐ์ ) ๊ณผ์
๐ข ์๋ก ๋ฐ๋ ๋ฐ์ดํฐ๋ก ๋ฆฌ์กํธ ์๋ฆฌ๋จผํธ ๋ง๋ค์ด์ค! ๋ณํ๋ JS ์ฝ๋๋ฅผ ํจ์จ์ ์ผ๋ก ๊ทธ๋ฆฌ๋ ๊ฒ์ Virtual DOM์ผ๋ก ๊ฐ๋ฅ ์ด ์ ๊ทผ๋ฐฉ์์ด React์ ์ ์ธ์ API๋ฅผ ๊ฐ๋ฅํ๊ฒ ๋ง๋ฆ
React๋ ์ ์ธ์ API๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๊ฐฑ์ ์ด ๋ ๋๋ง๋ค ๋งค๋ฒ ๋ฌด์์ด ๋ฐ๋์๋์ง๋ฅผ ๊ฑฑ์ ํ ํ์๊ฐ ์์ React ๋ด๋ถ์์๋ ๋น๊ต (diffing) ์๊ณ ๋ฆฌ์ฆ์ ํตํด ๋ฌด์์ด ๋ณ๊ฒฝ๋์๋์ง ๊ณ์ฐ์ด ์ผ์ด๋จ โ ์ปดํฌ๋ํธ์ ๊ฐฑ์ ์ด ์์ธก ๊ฐ๋ฅํด์ง๊ณ , ๋น ๋ฅธ ์ฑ์ ๋ง๋ค ์ ์์
์ฑ๋ฅ ์ต์ ํ
VDOM์ด ๋ฌด์์ด๊ณ , ์ ์ฐ๋์ง ์๋ค๋ฉด ํ์ฉํ ์ ์๋ ์ฑ๋ฅ ์ต์ ํ ๊ธฐ๋ฒ
๐ Ex. ๊ธด ๋ชฉ๋ก์ ๋ณด์ฌ์ค ๋ [1, 2, 3, 4, 5]๊ฐ [2, 3, 4, 5, 6]์ผ๋ก ๋ฐ๋ ์ํฉ์์ 1์ด ์ฌ๋ผ์ง๊ณ 6์ด ์ถ๊ฐ๋ ๊ฒ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด key๋ฅผ ์ก์์ค
Last updated