๐ธ ์น, ๋ฐ์คํฌํ, ๋ชจ๋ฐ์ผ ๋ฑ ๋ค์ํ ํ๋ซํผ์์ ํ์ฉํ ์ ์๋ JavaScript ํ๋ก ํธ์๋ ์คํ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
๐ธ ์ ์ธํ(Declarative) : ์ฝ๋๋ฅผ ์์ธํ ์ ์ด๋์ง ์๊ณ ๋ ์ฝ๋์ ์๋ฏธ๋ฅผ ์์ ์๊ฒ ์์ฑ, HTML/CSS/JS๋ฅผ ๋๋ ์ ์ ๊ธฐ ๋ณด๋ค๋ ํ๋์ ํ์ผ์ ๋ช
์์ ์ผ๋ก ์์ฑํ ์ ์๊ฒ JSX๋ฅผ ํ์ฉํ ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ.
๐ธ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ (Component-Based) : ํ๋์ ๊ธฐ๋ฅ ๊ตฌํ์ ์ํด ์ฌ๋ฌ ์ข
๋ฅ์ ์ฝ๋๋ฅผ ๋ฌถ์ด๋ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ฐ. ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌํ๋ฉด ์๋ก ๋
๋ฆฝ์ (์ปดํฌ๋ํธ๊ฐ ์์กด์ฑ์ด ์ ๊ธฐ ๋๋ฌธ์ ์ ๋ํ
์คํธ์๋ ์ฉ์ด)์ด๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ฅ์์ฒด์ ์ง์คํ์ฌ ๊ฐ๋ฐํ ์ ์์. ์ ์ง๋ณด์๊ฐ ํธํจ.
๐ธ ๋ฒ์ฉ์ฑ (Learn Once, Write Anywhere) : JS ํ๋ก์ ํธ ์ด๋์๋ ์ ์ฐํ๊ฒ ์ ์ฉ๋ ์ ์์. Facebook์์ ๊ด๋ฆฌ๋์ด ์์ ์ ์ด๊ณ ๊ฐ์ฅ ์ ๋ช
ํ๊ณ ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ๋ก ๋ชจ๋ฐ์ผ ๊ฐ๋ฐ๋ ๊ฐ๋ฅํจ.
๐ธ React์์ UI๋ฅผ ๊ตฌ์ฑํ ๋ ์ฌ์ฉํ๋ ๋ฌธ๋ฒ์ผ๋ก JavaScript๋ฅผ ํ์ฅํ ๋ฌธ๋ฒ.
๐ธ JavaScript๊ฐ ํ์ฅ๋ ๋ฌธ๋ฒ์ด์ง๋ง, ๋ธ๋ผ์ฐ์ ๊ฐ ๋ฐ๋ก ์คํํ ์ ์๋ JavaScript ์ฝ๋๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ ์ ์๋ JavaScript ์ฝ๋๋ก ๋ณํ์ ํด์ฃผ์ด์ผ ํจ.
๐ธ Babel : JSX๋ฅผ ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ ์ ์๋ JavaScript๋ก ์ปดํ์ผ. ์ปดํ์ผ ํ, JavaScript๋ฅผ ๋ธ๋ผ์ฐ์ ๊ฐ ์ฝ๊ณ ํ๋ฉด์ ๋ ๋๋งํ ์ ์์.
๐ธ DOM๊ณผ ๋ค๋ฅด๊ฒ CSS, JSX ๋ฌธ๋ฒ๋ง์ ๊ฐ์ง๊ณ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํ ์ ์์.
DOM = JS + HTML + CSS
React DOM = JSX + CSS
๐ธ ํ๋์ ์๋ฆฌ๋จผํธ ์์ ๋ชจ๋ ์๋ฆฌ๋จผํธ๊ฐ ํฌํจ๋์ด์ผ ํจ.
<opening tag>
<... />
<... />
</closing tag>
๐ธ ์๋ฆฌ๋จผํธ ํด๋์ค ์ฌ์ฉ ์, className
์ผ๋ก ํ๊ธฐ (๋ง์ฝ class
๋ก ์์ฑ ์, React์์๋ ์ด๋ฅผ html ํด๋์ค ์์ฑ ๋์ ์๋ฐ์คํฌ๋ฆฝํธ ํด๋์ค๋ก ๋ฐ์ ๋ค์).
<div className="..."></div>
๐ธ ์๋ฐ์คํฌ๋ฆฝํธ ํํ์ ์ฌ์ฉ ์, ์ค๊ดํธ{}
์ฌ์ฉ (์ค๊ดํธ๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด ์ผ๋ฐ ํ
์คํธ๋ก ์ธ์).
๐ธ ์ฌ์ฉ์ ์ ์ ์ปดํฌ๋ํธ๋ ๋๋ฌธ์๋ก ์์ (์๋ฌธ์๋ก ์์ํ๊ฒ ๋๋ฉด HTML ์๋ฆฌ๋จผํธ๋ก ์ธ์์ ํจ)
๐ธ ์กฐ๊ฑด๋ถ ๋ ๋๋ง์๋ ์ผํญ์ฐ์ฐ์ ์ฌ์ฉ (if
๋ฌธ์ return
์ผ๋ก๋ ๋ณ์์ ํ ๋น ๋ถ๊ฐ)
๐ธ ์ฌ๋ฌ ๊ฐ์ HTML ์๋ฆฌ๋จผํธ๋ฅผ ํ์ํ ๋, map()
ํจ์๋ฅผ ์ด์ฉ
map()
ํจ์๋ฅผ ์ฌ์ฉํ ๋๋ ๋ฐ๋์ key
JSX ์์ฑ์ ๋ฃ์ด์ผ ํจ.key
๋ React๊ฐ ์ด๋ค ํญ๋ชฉ์ ๋ณ๊ฒฝ, ์ถ๊ฐ ๋๋ ์ญ์ ํ ์ง ์๋ณํ๋ ๊ฒ์ ๋์key
๋ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ง๋ ๊ณ ์ ํ id
๊ฐ(์๋ณ์)์ ํ์ฉ.id
๊ฐ ์๋ ๊ฒฝ์ฐ์๋ง ๋ฐฐ์ด ์ธ๋ฑ์ค๋ฅผ ๋ฃ์(์ด๋ ์ตํ์ ์๋จ์).๐ก
key
๊ฐ์ ๋ฐ๋์ ๋ณํ์ง ์๊ณ , ์์ ๊ฐ๋ฅํ๋ฉฐ, ์ ์ผํด์ผ ํจ.
๋ง์ผ ๊ทธ๋ ์ง ์์ผ๋ฉด, ๋ง์ ์ปดํฌ๋ํธ ์ธ์คํด์ค์ DOM ๋ ธ๋๋ฅผ ๋ถํ์ํ๊ฒ ์ฌ์์ฑํ์ฌ ์ฑ๋ฅ์ด ๋๋น ์ง๊ฑฐ๋ ์์ ์ปดํฌ๋ํธ์ state๊ฐ ์ ์ค๋ ์ ์์
๐ธ ํ๋์ ๊ธฐ๋ฅ ๊ตฌํ์ ์ํ ์ฌ๋ฌ ์ข
๋ฅ์ ์ฝ๋ ๋ฌถ์. UI๋ฅผ ๊ตฌ์ฑํ๋ ํ์ ์์. JavaScript ํด๋์ค๋ก ์ ์๋ React ๊ตฌ์ฑ ์์์ ๊ธฐ๋ณธ ํด๋์ค
๐ธ ๋ชจ๋ ๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์
์ ์ต์ ํ ๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์ด ์ปดํฌ๋ํธ๋ ์ ํ๋ฆฌ์ผ์ด์
๋ด๋ถ์ ์ผ๋ก๋ ๊ทผ์(root)์ด ๋๋ ์ญํ ์ ํจ.
๐ธ ์ต์์ ์ปดํฌ๋ํธ๋ ๊ทผ์์ ์ญํ ์ ํ๋ฏ๋ก ๋ค๋ฅธ ์์ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ง ์ ์์. ์ด ๊ณ์ธต์ ๊ตฌ์กฐ(hierarchy)๋ฅผ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ํ์ํํ ์ ์์.
๐ธ ๋ฆฌ์กํธ SPA(single page aplication)๋ฅผ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ๊ฐ๋ฐํ ์ ์๋๋ก ๋ง๋ค์ด์ง ํด ์ฒด์ธ
๐ธ react-dom
: react๋ฅผ ๋ธ๋ผ์ฐ์ ๋์ ์ค์ ๋ก ๋๋๋งํ ์ ์๋๋ก ๋์์ค
๐ธ react-scripts
: SPA ๊ตฌํ๊ณผ ๋ณต์กํ ๋ชจ๋ ํ๋ก ํธ์๋ ๊ธฐ์ ์ธํ
์ด ๋ฏธ๋ฆฌ ์ค๋น ๋์ด์์.
๐ธ npx create-react-app ํ์ผ๋ช
: React ์ฑ ์์ฑ.
๐ธ react-scripts start
: package.json ํ์ผ์ scripts
- start:
์ ์๋ ๋ช
๋ น์ด๋ก, npm run start
์ ๋์ผ. ํฐ๋ฏธ๋์ ์
๋ ฅ์ React ์ฑ ์คํ.