0. ๊ฐ์
๋ณธ ํฌ์คํ ์์๋
โ React Element๋ ๋ฌด์์ธ๊ฐ?
โ ๊ทธ๊ฒ์ด ์ด๋ป๊ฒ DomElement๋ก ๋ณํ๋์ด ๋๋๋ง๋๋์ง
์ ๋ํด์ ์์๋ณด๊ฒ ๋ค.
1. React Element๋?
(0) Element์ ๋ํ์ฌ
๋จผ์ Element๊ฐ ๋ฌด์์ธ์ง ์์๋ณด๊ฒ ๋ค. Element์ ์ฌ์ ์ ์๋ฏธ๋ '๋ฌผ์ฒด๋ฅผ ๊ตฌ์ฑํ๋ ์ฑ๋ถ'์ ๋ปํ๋ค. Html์ ๊ณต๋ถํ๋ฉด์ DomElement์ ๋ํด ๋ค์ด ๋ดค์ ๊ฒ์ด๋ค. DOM Element๋ ํ๋ฉด์ ๊ตฌ์ฑํ๋ ํ๋์ ์ฑ๋ถ์ ์๋ฏธํ๋ค. ์๋ฅผ ๋ค์ด ์ค๋ช ํ๊ฒ ๋ค.
์์ ํ๋ฉด์ F12 ๊ฐ๋ฐ์ ๋ชจ๋๋ก ๋๋ฌ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
์ฌ๊ธฐ์ Div ํ๊ทธ ํ๋ํ๋, ํน์ ๊ทธ Div ํ๊ทธ ์ h1, h2 ํ๊ทธ ํ๋ํ๋๊ฐ ํ๋ฉด์ ๊ตฌ์ฑํ๋ ์ฑ๋ถ ์ค ํ๋์์ผ๋ก DOM Element์ ํด๋นํ๋ค.
โ ๊ทธ๋ ๋ค๋ฉด React Element๋ ๋ฌด์์ธ๊ฐ
React Element๋ ๋ฆฌ์กํธ ์ฑ์ ๊ตฌ์ฑํ๋ ๊ฐ์ฅ ์์ ๋ธ๋ก(์ฑ๋ถ)์ ์๋ฏธํ๋ค. ReactElement ๋ํ DOM Element์ฒ๋ผ ์๋ Element์ ์๋ฏธ๋ฅผ ๋ฐ๋ฅด๋ ๊ฐ๋ ์ด๋ค.
๊ทผ๋ฐ ์ด๋ฌ๋ฉด, React์ DOM์์ ๊ฐ์ Element๋ผ๋ ๋ง์ ์ฌ์ฉํด์ ๋จ์ด ์ฌ์ฉ์ ํผ๋์ด ์ค์ง ์์๊น?
๋น์ฐํ ๊ทธ๋ด ์ ์๋ค๊ณ ์๊ฐํ๋ค. ๊ทผ๋ฐ๋ Element๋ผ๋ ๋ง์ ์์ชฝ์์ ๊ฒน์น๊ฒ ์ฌ์ฉํ๋ ์ด์ ๊ฐ ์๋ค. ๊ทธ ์ด์ ๋ฅผ ํ์ด์ฐ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค. ๋จผ์ React์์๋ 'ํ๋ฉด์ ๋ํ๋๋ ๋ด์ฉ์ ๋ํด ๊ธฐ์ ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด'๋ฅผ ์ง์นญํ๋ ๋จ์ด๊ฐ ํ์ํ๋ค. ๊ทธ๋์ ์ฒ์์๋ ํด๋น ๊ฐ์ฒด๋ฅผ ์ง์นญํ๋ ๋จ์ด๋ก discriptor๋ผ๋ ํํ์ ์ผ๋ค. ํ๋ฉด ๋ด์ฉ์ ๋ํด ๊ธฐ์ ํ๋ค๋ ์๋ฏธ์์ ๋ง๋ค์ด๋ธ ์ ์กฐ์ด์๋ค. ํ์ง๋ง, discriptor์ DOM Element์ ๊ด๊ณ๋ฅผ ์๊ฐํ์ ๋, ํด๋น ๋จ์ด์ ์ฌ์ฉ์ด ๋ ํฐ ํผ๋์ ์ด๋ํ๋ค.
์์์ React Elements๋ผ๊ณ ์จ์ง ๋ง์ Discriptor๋ผ๊ณ ์ ์ ์นํํ์ฌ ์๊ฐํด๋ณด์. Discriptor์ Dom Elements์ ๊ด๊ณ๋ฅผ ๋ณด๋ฉด, Discriptor๋ฅผ ๋๋๋ง(๋น๋)ํ๋ฉด DOM Elements๊ฐ ๋๋ค. ๋ฐ๋ผ์ ๋์คํฌ๋ฆฝํฐ๋ ํ๋์ ์ค๊ณ๋์ด๊ณ , DOM ์๋ฆฌ๋จผ์ธ ๋ ๊ทธ ์ค๊ณ๋์ ๊ตฌํ์ฒด์ธ ์ ์ด๋ค. ๋ ๊ฐ๋ ์ ๊ตฌํ ์ ์ธ๊ฐ, ๊ตฌํ ํ์ธ๊ฐ ์๊ฐ์ ์์๋ฅผ ๋นผ๋ฉด ๊ฐ์ ๋ด์ฉ์ธ๋ฐ, ์์ ๋ค๋ฅธ ์ ์กฐ์ด๋ก ๋ถ๋ฅด๋๊น, ๊ฐ๋ ์ดํด ์ ํผ๋์ ์ด๋ํ๋ค. ๋ฐ๋ผ์ discripotor ๋ํ React ์์ Elements๋ ์๋ฏธ๋ก React Elements๋ก ๋ถ๋ฆฌ๊ฒ ๋์๋ค. ์ ๋ฆฌํ๋ฉด
React Elements
= "React ์ฑ์ ๊ตฌ์ฑํ๋ ๊ฐ์ฅ ์์ ๋ธ๋ก"
= "ํ๋ฉด์ ์ด๋ป๊ฒ ๊ทธ๋ฆด์ง์ ๋ํด ๊ธฐ์ ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด"
= "๋๋๋ง ๋์ง ์์ DOM Elements"
๋ก ๋ณผ ์ ์๋ค.
2. React Elements๊ฐ DOM Elements๋ก ๋๋๋ง ๋๋ ์๋ฆฌ
โ ์ ๊ฐ๋๋ก ์ค๋ช ํ ์๋ฆฌ
์ ๊ฐ๋์ ๋ํ ์ค๋ช
์ ๋ค์๊ณผ ๊ฐ๋ค.
1. ์ฐ๋ฆฌ๊ฐ ๋จผ์ React ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ๋ค. React ์ปดํฌ๋ํธ๋ ์ฐ๋ฆฌ๊ฐ ํ์์ ์์ฑํ๋ ํ๋์ ๋ณ์ ํน์ ํจ์ ๋ก์ง์ด๋ค.
2. npm run start ๋ฑ์ผ๋ก Build๋ฅผ ์์ํ๋ฉด, React ํ๋ ์์ํฌ์์ jsxํ์ผ์ ๋ํ์ฌ React.createElements()๋ฅผ ์ํํ๋ค.
(์ด๋, createElements์ ์ธ์๋ก๋ type, [props], [... children]์ด ์๋ค. type์ ํ๊ทธ์ ์ด๋ฆ์ด๋ค. props๋ ํ๊ทธ์ ์์ฑ์ ํฌํจํ๊ณ ์๋ ๊ฐ์ฒด์ด๋ค. ์์ง๊น์ง ์ฐ๋ฆฌ๋ props๋ฅผ ํ๊ทธ์ ์์ฑ์ ๋ํ ๊ฐ์ ๋ถ๋ฌ์ค๋๋ฐ๋ง ์ฌ์ฉํ๋ค. children๋ ์์ ํ๊ทธ๋ค์ด๋ค.)
3. React.createElements()๋ ์ปดํฌ๋ํธ๋ฅผ React Element๋ก ๋ณํํ๋ ์ญํ ์ ํ๋ค. React Element๋ ์๊น ์ค๋ช ํ๋ฏ์ด ํ๋ฉด์ ๊ทธ๋ ค์ง ๋ด์ฉ์ ๊ธฐ์ ํ๋ ์๋ฐ ์คํฌ๋ฆฝํธ ๊ฐ์ฒด์ด๋ค. ๋ฐ๋ผ์ ๋ณํ ํ ๋ชจ์ต์ ๋ค์๊ณผ ๊ฐ๋ค.
{
type: "h1",
props: {
children: "์๋
ํ์ธ์"
}
}
4. ํด๋น React Elements๋ ๋๋๋ง ๋๋ฉด์ ์ง์ง Dom Elements๋ก ๋ณํ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ DOM Elements๊ฐ ์ฐ๋ฆฌ๊ฐ ๋ณด๋ ํ๋ฉด ์ ๊ตฌ์ฑ์์์ด๋ค.
<h1> ์๋
ํ์ธ์ </h1>
๋๋ฌด ๋ณต์กํ๊ฒ ์ค๋ช ํ ๊ฐ์ด ์์ด์ 1์ค ์์ฝํ๋ค.
(1. ๊ฐ๋ฐ์๊ฐ React ์ปดํฌ๋ํธ ์์ฑ) > (2. Build ์์...) > (3.React.createElementsํจ์๊ฐ ์ปดํฌ๋ํธ๋ฅผ React Elements ๊ฐ์ฒด๋ก ๋ณํ) > (4. ํด๋น ๊ฐ์ฒด๋ Rendering ๋ ๋, ์ง์ง DOM ๊ฐ์ฒด๋ก ๋ณํ๋จ.)
โ ๋ณต์กํ ์์
ํ์ง๋ง ์ด๋ฐ ๊ฒฝ์ฐ๋ ์์ ์ ์๋ค.
์ ๊ฐ ๋ง๋ React ์ปดํฌ๋ํธ๋ React ์ปดํฌ๋ํธ ์์ ์์ ํ๊ทธ๋ก ์ง์ง ํ๊ทธ๊ฐ ์๋๋ผ ๋ ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ฅผ ๋ค๊ณ ์๋๋ฐ์? ์ด ๊ฒฝ์ฐ๋ ๋ณํ ๊ณผ์ ์ด ์ด๋ป๊ฒ ๋๋์?
์ข์ ์ง๋ฌธ์ด๋ค! ์ด๋ ์๋ฅผ ๋ค์ด์ ์ค๋ช ํ๊ฒ ๋ค.
โด ์ปดํฌ๋ํธ ์์ฑ
๋ด๊ฐ ์ง ์ฝ๋๊ฐ ๋ค์๊ณผ ๊ฐ๋ค๊ณ ์๊ฐํด๋ณด์.
ConFirmDialog๋ผ๋ ์ปดํฌ๋ํธ๋ P ํ๊ทธ์ ๋ด๊ฐ ์๋ก ๋ง๋ ์ฌ์ฉ์ ์ ์ Button ํ๊ทธ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. (๊ธฐ๋ณธ ์ ๊ณต๋๋ ๋ฒํผ์ ์๋ฌธ์๋ก ์์ํ๋ button ํ๊ทธ์ด๋ค!) Button ํ๊ทธ๋ ์๋ก์ด ์ปดํฌ๋ํธ๋ก์ ๋งจ ์์ ๊ธฐ์ ๋์ด์๋ค. Button ํ๊ทธ ์ ๋ด์ฉ๋ฌผ์ ๊ธฐ๋ณธ button ํ๊ทธ์ b ํ๊ทธ ์ด๋ค.
โต React Elements๋ก ๋ณํ
๋ณํ๋ ๋ชจ์ต์ด๋ค. Confirm Dialog๋ ๋ฐ๋ก props๋ฅผ ์ฌ์ฉํ์ง ์์์์ผ๋ก Children ํ๊ทธ๋ก ๋์ด๊ฐ์. ๊ฑฐ๊ธฐ์ ๊ธฐ๋ณธ p ํ๊ทธ๋ ๋ฌธ์์ด "p" ํํ๋ก Type์ด ๊ธฐ์ ๋์ด์๊ณ , ์ดํ ๋ด์ฉ์ ์์ ์ ๊ฐ๋ ์์์ ๋๊ฐ๋ค. ๊ทธ๋ฆฌ๊ณ ์์ฃผ์ ์ธ๋ฌผ์ธ ์ฌ์ฉ์ ์ ์ Button ์ปดํฌ๋ํธ ๋ถ๋ถ์ ์ดํด๋ณด์. ํด๋น ๋ถ๋ถ์ "" ๋ฌธ์์ด ํํ๋ก ๋์ด์์ง ์๊ณ , type: Button ํํ๋ก ๊ทธ๋๋ก ์จ์ ธ์๋ค. ์ด๋ React.createElements ํจ์๊ฐ ํด๋น ๋ถ๋ถ์ ๊ธฐ๋ณธ ํ๊ทธ๊ฐ ์๋ ์ปดํฌ๋ํธ์์ ์ธ์งํ์ฌ ์ ๋ ๊ฒ ์ ์ ๊ฒ์ด๋ค. ์ด๋ฅผ ํ์ธํ React๋ ํด๋น ๋ถ๋ถ์ ๋ํด์ ๋ค์ ํ๋ฒ ๋ ๋ณํ์ ์งํํ๋ค. ํด๋น ๋ณํ์ ํ๊ทธ๊ฐ ๋ ์ด์ ์ปดํฌ๋ํธ๊ฐ ์๋๊ณ , ์ง์ง HTML ํ๊ทธ๋ฅผ ๋ง๋ ๋๊น์ง drilling ํ์ฌ ์งํ ๋๋ค. ๊ทธ๋์ ์ต์ข ํํ๋ ๋ค์๊ณผ ๊ฐ๋ค.
ํด๋น ๋ถ๋ถ์์ ์ ์ ์๋ฏ ํ๊ทธ ์ฌ์ด์ ๋ด์ฉ๋ฌผ์ธ ๋ฌธ์์ด์ children์ผ๋ก ๋ค์ด๊ฐ๊ฒ ๋๋ค. ์ด์ ์ด๊ฒ์ด ๋๋๋ง ์์ DOM Elements๊ฐ ๋๋ ๊ฒ์ด๋ค.
ํ ์ค ์์ฝ ํ๋ฉด
์ปดํฌ๋ํธ ์์ ์ปดํฌ๋ํธ๊ฐ ์์ ์, React๋ ํด๋น ์ปดํฌ๋ํธ๋ฅผ JS ๊ฐ์ฒด๋ก ๋ณํํ ๋, ๋ชจ๋ ๋ด์ฉ๋ฌผ์ด HTML ํ๊ทธ์ ๋ฌธ์์ด๋ก ํํ๋ ๋๊น์ง drilling ํ์ฌ ํํํ๋ค.