๐กWhat is React??
- ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ์ํ JavaScript ์คํ ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ
โ
๋ฆฌ์กํธ์ 3๊ฐ์ง ํน์ง
- ๋ฆฌ์กํธ๋ ์ ์ธํ์ด๊ณ
- ์ปดํฌ๋ํธ ๊ธฐ๋ฐ์ด๋ฉฐ
- ๋ค์ํ ๊ณณ์์ ํ์ฉํ ์ ์๋ค๋ ํน์ง์ ๊ฐ์ง๊ณ ์๋ค.(๋ฒ์ฉ์ฑ์ด ๋ฐ์ด๋๋ค)
์ ์ธํ(Declarative)
- ๋ฆฌ์กํธ๋ ํ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด HTML / CSS / JS๋ก ๋๋ ์ ์ ๊ธฐ๋ณด๋ค
ํ๋์ ํ์ผ์ ๋ช
์์ ์ผ๋ก ์์ฑํ ์ ์๊ฒ JSX๋ฅผ ํ์ฉํ ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ์
์งํฅํ๋ค.
์ปดํฌ๋ํธ ๊ธฐ๋ฐ(Component-Based)
- ๋ฆฌ์กํธ๋ ํ๋์ ๊ธฐ๋ฅ ๊ตฌํ์ ์ํด ์ฌ๋ฌ ์ข
๋ฅ์ ์ฝ๋๋ฅผ ๋ฌถ์ด๋ ์ปดํฌ๋ํธ๋ฅผ
๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ฐํ๋ค.
- ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌํ๋ฉด ์๋ก ๋
๋ฆฝ์ ์ด๊ณ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์, ๊ธฐ๋ฅ ์์ฒด์
์ง์คํ์ฌ ๊ฐ๋ฐ ํ ์ ์๋ค.
๋ฒ์ฉ์ฑ(Learn Once, Write Anywhere)
- ๋ฆฌ์กํธ๋ JavaScript ํ๋ก์ ํธ ์ด๋์๋ ์ ์ฐํ๊ฒ ์ ์ฉ๋ ์ ์๋ค.
- Facebook์์ ๊ด๋ฆฌ๋์ด ์์ ์ ์ด๊ณ , ๊ฐ์ฅ ์ ๋ช
ํ๋ฉฐ, ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ๋ก ๋ชจ๋ฐ์ผ ๊ฐ๋ฐ๋ ๊ฐ๋ฅํ๋ค.
๐กJSX
- JavaScript๋ฅผ ํ์ฅํ ๋ฌธ๋ฒ์ด๋ค.
JSX๋?
- JavaScript XML์ ์ค์๋ง๋ก ๋ฌธ์์ด๋ ์๋๊ณ HTML๋ ์๋๋ค
- React์์ UI๋ฅผ ๊ตฌ์ฑํ ๋ ์ฌ์ฉํ๋ ๋ฌธ๋ฒ์ผ๋ก JavaScript๋ฅผ ํ์ฅํ ๋ฌธ๋ฒ์ด๋ค.
- JSX๋ JavaScript๊ฐ ํ์ฅ๋ ๋ฌธ๋ฒ์ด์ง๋ง, ๋ธ๋ผ์ฐ์ ๊ฐ ๋ฐ๋ก ์คํํ ์ ์๋ JavaScript์ฝ๋๊ฐ ์๋๋ฏ๋ก, ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ ์ ์๋ JavaScript์ฝ๋๋ก ๋ณํ์ ํด์ฃผ์ด์ผ ํ๋ฉฐ, ์ด ๋ ์ด์ฉํ๋ ๊ฒ์ด "Babel"์ด๋ค.
๐ Babel์ด๋?
- Babel์ JSX๋ฅผ ๋ถ๋ผ์ฐ์ ๊ฐ ์ดํดํ ์ ์๋ JavaScript๋ก ์ปดํ์ผํ๋ฉฐ,
์ปดํ์ผ ํ, JavaScript๋ฅผ ๋ธ๋ผ์ฐ์ ๊ฐ ์ฝ๊ณ ํ๋ฉด์ ๋ ๋๋งํ ์ ์๋ค.
DOM & React JSX
- Reactdptjsms DOM๊ณผ ๋ค๋ฅด๊ฒ CSS, JSX ๋ฌธ๋ฒ๋ง์ ๊ฐ์ง๊ณ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํ ์ ์๋ค.
- ์ฆ, ์ปดํฌ๋ํธ ํ๋๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์ ํ์ํ ํ์ผ์ด ์ค์ด๋ค์ด, ํ๋์ ์ปดํฌ๋ํธ๋ฅผ ํ์ธํ ์ ์๋ค.
- JSX๋ฅผ ์ฌ์ฉํ๋ฉด JavaScript๋ง์ผ๋ก ๋งํฌ์
(markup) ํํ์ ์ฝ๋๋ฅผ ์์ฑํ์ฌ DOM์ ๋ฐฐ์นํ ์ ์๋ค.
์ JSX๋ฅผ ์จ์ผํ๋๊ฐ?
- DOM์์ JavaScript์ ํจ๊ป ์ฌ์ฉํ๊ธฐ ์ํด์๋ JavaScript์ HTML์ ์ฐ๊ฒฐํ๊ธฐ ์ํ ์์
์ด ํ์ํ๋ค.
- React์์๋ JSX๋ฅผ ์ด์ฉํด์ ์์ ๋ณด์๋ DOM์ฝ๋๋ณด๋ค ๋ช
์์ ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ผ๋ฉฐ, ๊ธฐ๋ฅ๊ณผ ๊ตฌ์กฐ๋ฅผ ํ๋์ ํ์ธ ํ ์ ์๋ค.
โJSX์์ด React๋ฅผ ์ธ ์ ์์๊น??
- JSX์์ด๋ React ์์๋ฅผ ๋ง๋ค ์ ์๋ค.
- ๋ค๋ง ์ฝ๋๊ฐ ๋ณต์กํ๊ณ , ๊ฐ๋
์ฑ์ด ๋จ์ด์ง๋ ๋จ์ ์ด ์๋ค.
๐กJSX ํ์ฉ
JSX ๊ท์น
1. ํ๋์ ์๋ฆฌ๋จผํธ ์์ ๋ชจ๋ ์๋ฆฌ๋จผํธ๊ฐ ํฌํจ
: JSX์์ ์ฌ๋ฌ ์๋ฆฌ๋จผํธ๋ฅผ ์์ฑํ๊ณ ์ํ๋ ๊ฒฝ์ฐ, Opening tagdhk Closing tag๋ก ๊ฐ์ธ์ฃผ์ด์ผ ํ๋ค.
2. ์๋ฆฌ๋จผํธ ํด๋์ค ์ฌ์ฉ ์, className์ผ๋ก ํ๊ธฐ
: React์์ CSS class์์ฑ์ ์ง์ ํ๋ ค๋ฉด "className"์ผ๋ก ํ๊ธฐํด์ผํ๋ค.
: ๋ง์ฝ class๋ก ์์ฑํ๊ฒ ๋๋ค๋ฉด React์์๋ ์ด๋ฅผ html ํด๋์ค ์์ฑ ๋์ ์๋ฐ์คํฌ๋ฆฝํธ ํด๋์ค๋ก ๋ฐ์๋ค์ด๊ธฐ ๋๋ฌธ์ ์ฃผ์ํด์ผํ๋ค.
3. JavaScript ํํ์ ์ฌ์ฉ ์, ์ค๊ดํธ({}) ์ด์ฉ
: JSX์์ JavaScirpt๋ฅผ ์ฐ๊ณ ์ ํ๋ค๋ฉด, ๊ผญ ์ค๊ดํธ๋ฅผ ์ด์ฉํด์ผํ๋ค.
: ์ค๊ดํธ๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด, ์ผ๋ฐ ํ
์คํธ๋ก ์ธ์ํ๋ค.
4. ์ฌ์ฉ์ ์ ์ ์ปดํฌ๋ํธ๋ ๋๋ฌธ์๋ก ์์(PascalCase)
: React ์๋ฆฌ๋จผํธ๊ฐ JSX๋ก ์์ฑ๋๋ฉด "๋๋ฌธ์"๋ก ์์ํด์ผํ๋ค.
๋๋ฌธ์๋ก ์์ฑ๋ JSX ์ปดํฌ๋ํธ๋ฅผ ๋ฐ๋ก ์ฌ์ฉ์ ์ ์ ์ปดํฌ๋ํธ๋ผ ๋ถ๋ฅธ๋ค.
: ์๋ฌธ์๋ก ์์ํ๊ฒ ๋๋ฉด ์ผ๋ฐ์ ์ธ HTML ์๋ฆฌ๋จผํธ๋ก ์ธ์ํ๊ฒ๋๋ค.
5. ์กฐ๊ฑด๋ถ ๋ ๋๋ง์๋ ์ผํญ์ฐ์ฐ์ ์ฌ์ฉ
: ์กฐ๊ฑด๋ถ ๋ ๋๋ง์ if๋ฌธ์ด ์๋ ์ผํญ์ฐ์ฐ์๋ฅผ ์ด์ฉํด์ผํ๋ค.
6. ์ฌ๋ฌ ๊ฐ์ HTML ์๋ฆฌ๋จผํธ๋ฅผ ํ์ํ ๋, map() ํจ์๋ฅผ ์ด์ฉ
: React์์ ์ฌ๋ฌ ๊ฐ์ HTML ์๋ฆฌ๋จผํธ๋ฅผ ํ์ํ ๋๋ "map()" ํจ์๋ฅผ ์ฌ์ฉํ๋ค.
: map ํจ์๋ฅผ ์ฌ์ฉํ ๋๋ ๋ฐ๋์ "key" JSX ์์ฑ์ ๋ฃ์ด์ผํ๋ค.
์ด ์์ฑ์ ๋ฃ์ง ์์ผ๋ฉด ๋ฆฌ์คํธ์ ๊ฐ ํญ๋ชฉ์ key๋ฅผ ๋ฃ์ด์ผ ํ๋ค๋ ๊ฒฝ๊ณ ๊ฐ ํ์๋๋ค.
๐กComponent
๐Component๋?
- ํ๋์ ๊ธฐ๋ฅ ๊ตฌํ์ ์ํ ์ฌ๋ฌ ์ข
๋ฅ์ ์ฝ๋ ๋ฌถ์์ด๋ค.
- UI๋ฅผ ๊ตฌ์ฑํ๋ ํ์ ์์์ด๋ค.
Component๋ก ์๊ฐํ๊ธฐ
- React๋ฅผ ์ด์ํ๋ฉด, ๊ฐ์ ๋
๋ฆฝ์ ์ธ ๊ธฐ๋ฅ์ ๊ฐ์ง๋ฉฐ, UI์ ํ ๋ถ๋ถ์ ๋ด๋นํ๊ธฐ๋ ํ๋ ์ด๋ฌํ ์ปดํฌ๋ํธ๋ฅผ ์ฌ๋ฌ ๊ฐ ๋ง๋ค๊ณ ์กฐํฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ง๋ค ์ ์๋ค.
- ๋ชจ๋ ๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์
์ ์ต์ ํ ๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์ด ์ปดํฌ๋ํธ๋ ์ ํ๋ฆฌ์ผ์ด์
๋ด๋ถ์ ์ผ๋ก๋ ๊ทผ์(root)์ด ๋๋ ์ญํ ์ ํ๋ค.
- ์ต์์ ์ปดํฌ๋ํธ๋ ๊ทผ์์ ์ญํ ์ ํ๋ฏ๋ก ๋ค๋ฅธ ์์ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ง ์ ์์ผ๋ฉฐ, ์ด ๊ณ์ธต์ ๊ตฌ์กฐ(hierarchy)๋ฅผ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ํ์ํํ ์ ์๋ค.
Component Based ์ฅ์