React๋?
Component ๋จ์์ Javascript Library
๊ฐ์ ๋(Virtual Dom)
ย ์ ํตํด UI๋ฅผ ๋น ๋ฅด๊ฒ ์ ๋ฐ์ดํธํ๋ค๊ฐ์ ๋(Virtual Dom)
์ ์ด์ UI ์ํ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์งํด์, ๋ณ๊ฒฝ๋ UI์ ์ต์ ์งํฉ์ ๊ณ์ฐํ๋ ๊ธฐ์ ์ด๋ค. ์ด ๊ธฐ์ ๋ก ๋ถํ์ํ UI ์ ๋ฐ์ดํธ๋ ์ค๊ณ , ์ฑ๋ฅ์ ์ข์์ง๋ค- ์น ํ์ด์ง์ ๊ท๋ชจ๊ฐ ์ปค์ง๊ณ ๋ณต์กํ๊ณ ๋ค์ํ UI, UX์ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๋ฉฐ ์์ฐ์ฑ์ ํฅ์์ํค๊ณ
- ๋ง์ ์์ ๋ฐ์ดํฐ ๊ด๋ฆฌ์
- ์ฝ๋์ ์ ์ง ๋ณด์๋ฅผ ๋์ฑ ํธ๋ฆฌํ๊ฒ ํ๊ธฐ ์ํด Frontend Framework(Library)๊ฐ ๋ฑ์ฅ
โจ์ฐธ๊ณ โจ Frontend Framework(Library)
:: Angular
- 2010๋ Google์์ ๊ฐ๋ฐํ, TypeScript ๊ธฐ๋ฐ์
- ๋งค์ฐ ์์ ์ ์ด๊ณ ํํํ Frontend App ๊ฐ๋ฐ์ด ๊ฐ๋ฅํ๋ฉฐ
- Framework๋ต๊ฒ ๋ค์ํ ๊ธฐ๋ฅ์ด ๋ด์ฅ๋์ด ์๋ค
- ๋ฌด๊ฒ๊ณ ๋ฐฐ์ฐ๊ธฐ ์ด๋ ต๋ค
:: Vue
- 2014๋ Evan You๋ผ๋ ๊ฐ์ธ์ด ๊ฐ๋ฐํ Framework
- ์ฝ๋๊ฐ ๊น๋ํ๊ณ ๋ฐฐ์ฐ๊ธฐ ์ฝ๋ค
:: React
- 2013๋ Facebook์์ ๊ฐ๋ฐํ Library
- MVC(Model-View-Controller) Architectureย (ex. Angular, Vue)์๋ ๋ค๋ฅด๊ฒ ๋ฆฌ์กํธ๋ ์ค๋ก์ง View๋ง ๋ด๋น
- ๊ทธ๋งํผ ๋ด์ฅ๋์ด ์๋ ๊ธฐ๋ฅ์ด ๋ถ์กฑํดย third-party ๋ผ์ด๋ธ๋ฌ๋ฆฌ(ex. React-router, Redux)๋ฅผ ํจ๊ป ์ฌ์ฉ
- React Native์ ์ฌ์ฉ
โ CRA
๋ฆฌ์กํธ ํ๋ก์ ํธ๋ฅผ ์์ํ๋๋ฐ ํ์ํ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ธํ ํด์ฃผ๋ ๋๊ตฌ(toolchain)
- React๋ UI ๊ธฐ๋ฅ๋ง ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์๊ฐ ์ง์ ๊ตฌ์ถํด์ผํ๋ ๊ฒ๋ค์ด ๋ง์๋ฐ,
- ์ ๋ฐ์ ์ธ ์์คํ ์ ์ง์ ๊ตฌ์ถํ ์ ์์ด ์ํ๋ ํ๊ฒฝ์ ๋ง๊ฒ ์ต์ ํํ ์ ์์ง๋ง
- ๋ฐ๋๋ก, ์ ๊ฒฝ์จ์ผ ํ ๊ฒ๋ค์ด ๋ง๊ธฐ ๋๋ฌธ์ ์ฒ์ ์์ํ๋ ๋จ๊ณ์์๋ ์ง์ ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ถ์ด ์ด๋ ค์ธ ์ ์๋ค
- ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด
CRA(Create-React-App)
๊ฐ ๋ํ๋ฌ๋ค
โ Component์ ๊ฐ๋ ๊ณผ ์ข ๋ฅ
Component
๋? ์ฌํ์ฉ ๊ฐ๋ฅํ UI ๊ตฌ์ฑ ๋จ์
โ ํน์ง
- ์ฌํ์ฉํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
- ์ฝ๋ ์ ์ง๋ณด์์ ์ข๋ค.
- ํด๋น ํ์ด์ง๊ฐ ์ด๋ป๊ฒ ๊ตฌ์ฑ๋์ด ์๋์ง ํ ๋์ ํ์ ํ๊ธฐ ์ข๋ค.
- ์ปดํฌ๋ํธ๋ ๋ ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ฅผ ํฌํจํ ์ ์๋ค. (๋ถ๋ชจ ์ปดํฌ๋ํธ - ์์ ์ปดํฌ๋ํธ)
-
๐ฉ์ง์ค! ์ปดํฌ๋ํธ์ ์ด๋ฆ์ ํญ์ ๋๋ฌธ์๋ก ์์!
- React๋ ์๋ฌธ์๋ก ์์ํ๋ ์ปดํฌ๋ํธ๋ฅผ DOM ํ๊ทธ๋ก ์ฒ๋ฆฌํ๋ค.
- ์๋ฅผ ๋ค์ด
<div />
๋HTML div ํ๊ทธ
๋ฅผ ๋ํ๋ด์ง๋ง,<Welcome />
์์ปดํฌ๋ํธ๋ฅผ ๋ํ๋ด๋ฉฐ
๋ฒ์ ์์ Welcome์ด ์์ด์ผ ํ๋ค.
๐ฌ
addComment
component๋ช ์ ์๋ฌธ์๋ก ์์ฑํ๋ค๊ฐ ์ฝ์ด์ค์ง ๋ชปํ๋ ๊ฒฝํ์ ์์ง๋ง์.๐ญ๐ญ๐ญ๐ญ๐ญ๐ญ๐ญ
โ ์ข ๋ฅ
- Classํ ์ปดํฌ๋ํธ(Class Component)
render()
ย ํจ์๊ฐ ๊ผญ ์์ด์ผ ํ๋ค
- ํจ์ํ ์ปดํฌ๋ํธ(Functional Component)
โ JSX
๋ฆฌ์กํธ์์ ์ฌ์ฉํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ฅ ๋ฌธ๋ฒ
- JavaScript Syntax Extension
- JSX๋ก ์์ฑํ ์ฝ๋๋ ๋ธ๋ผ์ฐ์ ์์ ๋์ํ๋ ๊ณผ์ ์์ ๋ฐ๋ฒจ์ ์ฌ์ฉํ์ฌ ์ผ๋ฐ ์๋ฐ์คํฌ๋ฆฝํธ ํํ์ ์ฝ๋๋ก ๋ณํ๋๋ค
โ ํน์ง
- ์๋ฐ์คํฌ๋ฆฝํธ ํํ :
{ ... javascript... }
class
vs.className
- Inline Styling :
<div style=>Hello React</div>
- Self Closing tag :
<div></div>
vs.<div />
-
- ๋ชจ๋ ์์๋ฅผ ๊ฐ์ธ๋ ์ต์์ ์์ (cf. React Fragments :
<> ... </>
) -
JSX์ ํฐ ํน์ง ์ค ํ๋๋ ๋ด๋ถ ์์๋ค์ ๊ฐ์ธ๋ ์ต์์ ์์๊ฐ ์์ด์ผ ํ๋ค. Fragments๋ DOM์ ๋ณ๋์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ์ง ์๊ณ ํ๋์ ์ปดํฌ๋ํธ ์์ ์ฌ๋ฌ ์์(์์)๋ค์ ๊ฐ๋จํ๊ฒ ๊ทธ๋ฃนํ ํ ์ ์๋ ๊ธฐ๋ฅ์ด๋ค. ์์๋ค์ ๊ฐ์ธ๋
div
ํ๊ทธ์ ๋ถํ์ํ ์์ฑ์ ๋ง์ ์ ์์ด ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๋ค.
- ๋ชจ๋ ์์๋ฅผ ๊ฐ์ธ๋ ์ต์์ ์์ (cf. React Fragments :
โ ๋ชฉํ!
- ์ค๋๋ React๊ฐ ๋ง์ด ์ฌ์ฉ๋๊ณ ์๋ ์ด์ ๋ฅผ ์๊ณ
- React๊ฐ ๋ฌด์์ธ์ง ๊ฐ๋ ์ ์ตํ๊ณ
- CRA๊ฐ ๋ฌด์์ธ์ง ์ดํดํ๊ณ
- Component์ ๊ฐ๋ ๊ณผ ์ข ๋ฅ์ ๋ํด ์ค๋ช ํ ์ ์๋ค
- JSX๊ฐ ๋ฌด์์ธ์ง, ํน์ฑ์ ๋ฌด์์ธ์ง ์ค๋ช ํ ์ ์๋ค