๐ Nomad Coder ReactJS๋ก ์ํ ์น ์๋น์ค ๋ง๋ค๊ธฐ
๊ฐ์๋ ธํธ (2021 Updated ver.)
๋จผ์ , ๋ฆฌ์กํธ๊ฐ ์ผ๋ง๋ ํธ๋ฆฌํ์ง ์์๋ณด๊ธฐ ์ํด Vanilla JS / React JS ๋ ๊ฐ์ง ๋ฒ์ ์ผ๋ก ์นด์ดํ ์ฑ์ ๊ตฌํํด ๋ณธ๋ค.
(gif ๋ง๋ค๊ธฐ ๋๋ฌด ๊ท์ฐฎ๋ค.. ๊ผญ ํ์ํ ๊ฑฐ ์๋๋ฉด ์ด์ ..^^..)
๊ธธ๊ณ ๊ธธ๊ณ ๊ธด ์ฝ๋
์ฌ๊ธฐ์ ์ฐ์ด๋ ์ฝ๋๋ ์ผ๋ฐ์ ์ผ๋ก ๊ฐ๋ฐ์๋ค์ด ์ฌ์ฉํ๋ ํ์์ ์๋๋ค (์ข ๋ ๋ณต์กํ๊ณ ์ด๋ ค์ด ๋ฐฉ์).
์ค๋ช
์ฉ ์ฝ๋์์ ์ธ์งํ์.
๋ฆฌ์กํธ๋ index์ HTML ์ฝ๋๋ก ๊ตฌํํ์ง ์๊ณ JS, ReactJS๋ก ๋ชจ๋ elements๋ฅผ ์์ฑํ๋ค.
์์๋ฅผ ์์ฑํจ๊ณผ ๋์์ CSS, ์ด๋ฒคํธ๊น์ง ์์ฑํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ๊ฐ ๋ฐ๋ก ๋ง๋ค์ด ์ฐ๊ฒฐ์ํค๋ ์์
(ex. addEventListenr()
)์ ์๋ตํ ์ ์์ด ๊ฐํธํ๋ค.
React ๊ตฌ์ฑ์์
<script>
์ฒซ๋ฒ์งธ ์์ค๋ React JS, ๋๋ฒ์งธ ์์ค๋ React-DOM์ด๋ค.
๋ ๊ฐ์ง๋ ๊ฐ๊ฐ ๋ค๋ฅธ ์ญํ ์ ํ๋ค.
React JS
app์ด interactive UI๋ฅผ ๋ง๋๋ Library / Power
(elements, events ์์ฑ์ ๊ธฐ์ฌ)
React DOM
Library or Package
React Elements๋ฅผ HTML๋ก ๋ฐ๊พธ๋ ์ญํ
(์ค์ง์ ์ผ๋ก ๋ฆฌ์กํธ์ ์๋ฆฌ๋จผํธ๋ค์ ์ฐ๊ธฐ ์ํด ํ์ํจ)
<!-- HTML์์ react import -->
//React JS
<script src="https://unpkg.com/react@17.0.2/umd/react.production.min.js"></script>
//React-DOM
<script src="https://unpkg.com/react-dom@17.0.2/umd/react-dom.production.min.js"></script>
๋ฐ๋๋ผ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฆฌ์กํธ๋ ์๋ ๋ฐฉ์์ด ๋ฐ๋์ด๋ค.
interactive์ Key Point๋ event์ ๋ฐ์์ด๋ค.
addEventListener๋ฅผ ๋ฐ๋ณตํ๋ ๋์ ์ property๋ฅผ ์ ์ฉํจ์ผ๋ก์จ ๋ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ์ด๋ฒคํธ๋ฅผ ๊ตฌํํ ์ ์๊ฒ ๋์๋ค.
Summary
- React๋ฅผ ์ฌ์ฉํ๋ฉด ์์(element)๋ฅผ ์์ฑํ๊ณ ํด๋น ์์์ ์์ฑ(propert)๋ฅผ ์ถ๊ฐ/์ฐ๊ฒฐํ๋ ์ผ์ด ์ฌ์์ง๋ค.
- ๋ชจ๋ asset์ JS๋ก ๋ง๋ ํ, ์ต์ข ์ ์ผ๋ก ํ์ํ ์ ๋ณด๋ง HTML์ ํ๊ธฐํ ์ ์๋ ์ปจํธ๋กคํ๋ ํ์ ๊ฐ์ง๋ค.
์ด๊ฒ์ด React JS์ ๊ฐ์ฅ ํฐ ํ์.- ์ด๋ก ์ธํด ๋น ๋ฅด๊ฒ ์ฑ์ ๋ก๋ฉํ ์ ์๊ณ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ญ๋นํ์ง ์๋๋ค. (SPA ์ฅ์ ๊ณผ ์ฐ๊ฒฐ)
์์์ ํ๋ ๋ฆฌ์กํธ ์์ฑ์์ ์ ๋ ํธํ๊ฒ ํ๊ธฐ ์ํด ๊ฐ๋ฐํ ๊ฒ์ด JSX๋ค. JSX๋ JavaScript ํ์ฅ๋ฌธ๋ฒ์ผ๋ก HTML, JS์ ์ ์ฌํ ํํ๋ฅผ ๋ ๊ณ ์๋ค. React ์์๋ฅผ ๋ง๋ค์ด์ค๋ค.
๋ ์ฝ๋๋ ์๋ฒฝํ๊ฒ ๊ฐ์ ์ญํ ์ ํ๋ค.
JSX ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ฉด ๊ฐ๋ ์ฑ๊ณผ ํธ๋ฆฌํจ์ ๋ชจ๋ ์์น์ํฌ ์ ์๋ค.
์์ ์์
๊น์ง๋ง ํ๊ณ ์ฝ๋๋ฅผ ๋๋ ค๋ณด๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ๋ธ๋ผ์ฐ์ ๋ JSX ๋ฌธ๋ฒ์ ์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด ๋ ํ์ํ ๊ฒ์ด Babel์ด๋ค
Babel ๋งํฌ๋ฅผ import
ํ๊ณ compileํ script
์ type
์ ์ถ๊ฐํด์ฃผ๋ฉด, Babel์ด JSX ๋ฌธ๋ฒ์ ๋ธ๋ผ์ฐ์ ์์ ์๋ํ ์ ์๊ฒ๋ ๋ณํํด ์ค๋ค.
// rendering
const container = React.createElement("div", null, [h3, btn])
Original React๋ก ์ผ๋ ๋ ๋๋ง ์ฝ๋๋ฅผ JSX์ ๋ฌธ๋ฒ์ผ๋ก ๋ฐ๊พธ๊ธฐ ์ํด์๋ Component ๋ฐฉ์์ด ํ์ํ๋ค.
์์๋ก ์ ์ธํ๋ ํ์ดํ๊ณผ ๋ฒํผ์ ํจ์๋ก ๋ฐ๊พธ๊ณ , ์์๋ก ์ ์ธํ ์ปจํ ์ด๋์ ์ปดํฌ๋ํธ ๋ฐฉ์์ผ๋ก ๋ถ์ฌ์ฃผ๋ฉด ๋ ๋๋ง์ด ๊ฐ๋ฅํ๋ค.
ํจ์๋ก ๋ฐ๊พธ์ด ์ปดํฌ๋ํธ๋ก ์ ์ฉ์ ํด์ผ ์ฐ๋ฆฌ๊ฐ ๋ง๋ค์๋ ์์๋ค(props)๋ฅผ ์ ์ฉ์ํฌ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
const Container = (
<div>
<Title /> // === Title()
<Button />
</div>
)
React๊ฐ HTML๊ณผ ํผ๋ํ์ง ์๋๋ก Component ์ด๋ฆ์ ๋๋ฌธ์๋ก ์์ฑํ๋ ๊ฒ์ ์์ง ์๋๋ก ์ฃผ์ํ๋ค.
์ด๋ ๊ฒ ์ปดํฌ๋ํธ๋ก ๋ถ์ฌ ๋ฃ์ ์ฝ๋๊ฐ ํจ์๋ฅผ ๋ถ์ฌ๋ฃ๊ธฐ ํ ๋ฐฉ์๊ณผ ๊ฐ๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
Summary
JSX๋ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ฌ๋ฌ ์์ ์์๋ก ๋๋์ด ๊ด๋ฆฌํ ์ ์๊ฒ ํ๋ค.
๋ชจ๋์ฒ๋ผ ์์๋ฅผ ๋ถ๋ฆฌํด ์์ฑํ๊ณ ๊ด๋ฆฌํจ์ผ๋ก์จ, ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์ ํจ์จ์ ๋์ธ๋ค.