Single Page Application(SPA) ๊ตฌํ ๐ฑHTML ํ์ผ 1๊ฐ๋ง ์ฌ์ฉํ์ด์ง ์ ํ ์ HTML ์ผ๋ถ๋ง ๊ต์ฒดํ์ฌ ์๋ก๊ณ ์นจ ์์ด ๋ถ๋๋ฌ์ด ์ฌ์ฉ์ ๊ฒฝํ ์ ๊ณต์์: Naver Vibe, Flipkart, Instagram ๋ฑ๊ฐ๋ฐ ํจ์จ์ฑ ์ฆ๋ โ๏ธHTML ์ฌ์ฌ์ฉ
Node.js ์ค์น ๐LTS ๋ฒ์ ์ค์น (ARM CPU ์ฌ์ฉ์๋ ARM64 ๋ฒ์ ๋ค์ด๋ก๋)Chocolatey ์ค์น๋ ๋ถํ์Visual Studio Code ์ค์น ๐๋งฅ๋ถ๊ณผ ์๋์ฐ ๋์ผํ ์ค์น ๊ณผ์ ์์ ์ฉ ํด๋ ์์ฑ๋ฐํํ๋ฉด์ ์๋ฌธ๋ช ์ผ๋ก ํด๋ ์์ฑ ๊ถ์ฅOneDrive ๋ด๋ถ
JSX๋ React์์ HTML์ ๋์ฒดํ๋ ๋ฌธ๋ฒ์ผ๋ก, ๊ธฐ์กด HTML/CSS ์ง์์ ํ์ฉํ์ฌ ์นํ์ด์ง๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. App.js๊ฐ ๋ฉ์ธ ํ์ด์ง์ด๋ฉฐ, ์ฌ๊ธฐ์ ๋ ์ด์์์ ๊ตฌ์ฑํฉ๋๋ค.HTML์ class ๋์ className์ ์ฌ์ฉ์ด์ : JSX๊ฐ JavaScript
์ด ๊ฐ์๋ React์์ ๋ฒํผ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ณ state๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ์ ๋ค๋ฃน๋๋ค. ์ข์์ ๋ฒํผ์ ํตํด ์ค์ตํด ๋ด ๋๋ค.ํฐ๋ฏธ๋์ด๋ ๋ธ๋ผ์ฐ์ ์ ํ์๋๋ ๋ ธ๋์ warning์ ๊ฐ๋ฌด์ ๊ฐ๋ฅeslint๋ ์ฝ๋ฉ ๊ด์ต์ ๊ต์ ํด์ฃผ๋ ๋๊ตฌ๋ฌด์ํ๋ ค๋ฉด ํ์ผ ์ต์๋จ์ /\*eslint
์ด ๊ฐ์๋ React์์ ๋ฐฐ์ด(Array)๊ณผ ๊ฐ์ฒด(Object) ํ์ ์ state๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ค๋ฃน๋๋ค. ํนํ ์ฐธ์กฐ ํ์ ๋ฐ์ดํฐ์ ํน์ฑ๊ณผ ๋ถ๋ณ์ฑ(Immutability) ์์น์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.๋ฐฐ์ด/๊ฐ์ฒด๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๊ณ , ๋ณ์๋ ํด๋น ์
์ด ๊ฐ์๋ React์์ ๋ณต์กํ HTML ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋จ์๋ก ๋ง๋๋ ์ปดํฌ๋ํธ(Component) ๋ฌธ๋ฒ์ ๋ํด ๋ค๋ฃน๋๋ค. ๋ชจ๋ฌ์ฐฝ UI๋ฅผ ์์ ๋ก ์ปดํฌ๋ํธ์ ๊ฐ๋ ๊ณผ ํ์ฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค.return() ๋ด๋ถ์๋ ํ๋์ ์ต์์ ํ๊ทธ๋ง ์กด์ฌํด์ผ ํจ์ฌ๋ฌ ์์๋ฅผ ๋๋ํ ๋ฐฐ์น
React์์ ๋ชจ๋ฌ์ฐฝ, ํญ, ์๋ธ๋ฉ๋ด ๋ฑ์ ๋์ ์ธ UI๋ฅผ ๋ง๋ค๊ธฐ ์ํ ์ฒด๊ณ์ ์ธ ์ ๊ทผ๋ฒ์ ์์๋ด ๋๋ค.HTML/CSS๋ก UI ๋์์ธ์ ๋จผ์ ์์ฑ๋ณด์ด๊ณ ์จ๊ฒจ์ผ ํ ๋ชจ๋ ์์๋ฅผ ๋ฏธ๋ฆฌ ๋์์ธUI์ ํ์ฌ ์ํ๋ฅผ ํํํ state ์์ฑboolean, ์ซ์, ๋ฌธ์์ด ๋ฑ ์ํฉ์ ๋ง๋
๋ฐ๋ณต ์คํ: ๋ฐฐ์ด ์์ ๊ฐ์๋งํผ ์ฝ๋ ๋ฐ๋ณต๋ฐฐ์ด ์์ ์ ๊ทผ: ์ฒซ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ก ๋ฐฐ์ด ์์ ํ๋์ฉ ์ ๋ฌ์ ๋ฐฐ์ด ๋ฐํ: return ๊ฐ์ ๋ชจ์ ์ ๋ฐฐ์ด ์์ฑjsx ์์๋ for ๋ฐ๋ณต๋ฌธ ์ฌ์ฉ ๋ถ๊ฐ์ ์ฝ๋๋ <div>์๋ </div>์ 3๋ฒ ๋ฐ๋ณต ์์ฑ๊ธ์ ๋ชฉ ๋ฐฐ์ด์ ๊ฐ
์ปดํฌ๋ํธ ๊ฐ ๋ฐ์ดํฐ ์ ์ก: ์์ ์ปดํฌ๋ํธ๊ฐ ๋ถ๋ชจ ์ปดํฌ๋ํธ์ state๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด props๋ก ์ ๋ฌํด์ผ ํจ ๐๋ณ์ ์ค์ฝํ ์ ํ: ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ๋ค๋ฅธ ํจ์์ ์๋ ๋ณ์๋ฅผ ๋ง์๋๋ก ๊ฐ์ ธ๋ค ์ธ ์ ์์ ๐ซ๋ถ๋ชจ-์์ ๊ด๊ณ: React์์๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋
ํด๋ฆญํ ๊ธ์ ์ ๋ชฉ์ด ๋ชจ๋ฌ์ฐฝ์ ํ์๋๊ฒ ํ๊ธฐ0๋ฒ ๊ธ ํด๋ฆญ โ 0๋ฒ ๊ธ์ ๋ชฉ ํ์1๋ฒ ๊ธ ํด๋ฆญ โ 1๋ฒ ๊ธ์ ๋ชฉ ํ์๋ชจ๋ฌ์ฐฝ์ ์ด๋ฏธ ๋์์ธ๋์ด ์์ผ๋ฏ๋ก ํจ์ค โ ๋ชจ๋ฌ์ฐฝ์ ํ์ํ ๊ธ ๋ฒํธ๋ฅผ state๋ก ๊ด๋ฆฌ์ซ์ํ state๋ก ํ์ฌ ๋ณด์ฌ์ค ๊ธ์ ์ธ๋ฑ์ค ์ ์ฅprops.๊ธ์ ๋ชฉ\[titl
ํ์์ ๋ฐ๋ผ ๋ค์ํ ํ์ ์ input ์ฌ์ฉ ๊ฐ๋ฅ ๐๏ธonChange ๋๋ onInput: ์ ๋ ฅ๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์ฝ๋ ์คํ ๐๋ค๋ฅธ ์ด๋ฒคํธ ํธ๋ค๋ฌ: onMouseOver, onScroll ๋ฑ ๋ค์ํ๊ฒ ์กด์ฌ ๐ฑ๏ธ์ด๋ฒคํธ ๊ฐ์ฒด e๋ฅผ ํตํด ํ์ฌ ์ ๋ ฅ๊ฐ์ ์ ๊ทผ ๐e.targ
ํ๋ฑ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐฉ์: "๋ฒํผ ๋๋ฅด๋ฉด ์ ์ ์ ๋ ฅ ๊ฐ์ ธ์์ HTML ์์ฑ" โ๋ฆฌ์กํธ ๋ฐฉ์: "๋ฒํผ ๋๋ฅด๋ฉด ์ ์ ์ ๋ ฅ ๊ฐ์ ธ์์ state์ ์ถ๊ฐ" โ ๋ฆฌ์กํธ๋ state๋ฅผ ๋ณ๊ฒฝํ๋ฉด UI๊ฐ ์๋์ผ๋ก ์ ๋ฐ์ดํธ๋๋ ์๋ฆฌ ํ์ฉ ๐์๋ก๊ณ ์นจ ์ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง๋ ๊ฒ์ ์ ์ (๋ธ๋ผ์ฐ
์์ React ํ๋ก์ ํธ๋ฅผ ์ฝ๊ณ ์ดํดํ๊ธฐ ์ํด ํ์ ๐๋ ๊ฑฐ์ ์ฝ๋๋ฅผ ์ ์ง๋ณด์ํ ๋ ํ์ํ ์ง์ ๐ ๏ธํ์ฌ๋ Function ์ปดํฌ๋ํธ ์ฌ์ฉ์ ๊ถ์ฅ โ class ์ ์ธ: class ์ปดํฌ๋ํธ๋ช extends React.Componentconstructor: ์ปดํฌ๋ํธ ์ด๊ธฐํ
์น๋ธ๋ผ์ฐ์ ๋ HTML, CSS, JS๋ง ํด์ ๊ฐ๋ฅ ๐ปReact์ JSX, state ๋ฑ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ง์ ์ดํดํ ์ ์์ โ๋น๋ ๊ณผ์ ์ ํตํด ๋ธ๋ผ์ฐ์ ์นํ์ ์ธ ํ์ผ๋ก ๋ณํ ํ์ ๐๋ณํ๋ ํ์ผ์ ์๋ฒ์ ์ฌ๋ ค์ผ ์ฌ์ฉ์๊ฐ ์ ๊ทผ ๊ฐ๋ฅ ๐์ฝ์/ํฐ๋ฏธ๋์ ์๋ฌ๊ฐ ์์ด์ผ ํจ (
์ค๋๋ถํฐ ์ผํ๋ชฐ ํ๋ก์ ํธ๋ฅผ ์๋ก ๋ง๋ค์ด๋ด ์๋ค! CSS ์์ฑ์ด ๊ท์ฐฎ์ผ๋ React-Bootstrap ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ ๋ ์ด์์์ ์ฝ๊ฒ ๋ณต์ฌ๋ถ์ฌ๋ฃ๊ธฐ ๋ฐฉ์์ผ๋ก ๋ง๋ค์ด๋ณด๊ฒ ์ต๋๋ค.์์ ํด๋์์ Shift + ์ฐํด๋ฆญ โ PowerShell/ํฐ๋ฏธ๋ ์ด๊ธฐํฐ๋ฏธ๋์ ๋ช ๋ น์ด ์ ๋ ฅ:ํ๋ก์
React๋ ์์ ๋ก์ด ํ๋ ์์ํฌ๋ก, ์ด๋ฏธ์ง๋ฅผ ๋ฃ๋ ๋ฐฉ๋ฒ๋ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์์ต๋๋ค!๋ฉ์ธํ์ด์ง์ ํฐ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง๋ฅผ ๋ฃ์ด๋ด ์๋ค.HTML ๊ตฌ์กฐ:CSS ์คํ์ผ๋ง (App.css):ํต์ฌ: CSS ํ์ผ์์ src ํด๋ ์์ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ ๋๋ ./์ด๋ฏธ์ง๊ฒฝ๋ก ํ์ ์ฌ์ฉHTML ์์์
์ํ๋ชฉ๋ก์ ์ปดํฌ๋ํธ๋ก ๋ง๋ค๊ธฐ์ปดํฌ๋ํธ์ ๋ฐ์ดํฐ๋ฐ์ธ๋ฉํ๊ธฐ๋ฐ๋ณต์ ์ธ HTML์ map ๋ฐ๋ณต๋ฌธ ์ฌ์ฉํ๊ธฐ์ค์: JSX๋ฅผ exportํ๋ ์ปดํฌ๋ํธ์ฉ ํ์ผ์ .js ๋ง๊ณ .jsx๋ก ๋ง๋ค์ด์ผ Vite ํ๊ฒฝ์์ ์ ์๋ํฉ๋๋ค! โ ๏ธ์ค์ ์๋น์ค์์๋ ์๋ฒ์์ ๋ฐ์์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ์ค๋นํด๋ด
/detail๋ก ์ ์ํ๋ฉด ๋ณด์ฌ์ค ์์ธํ์ด์ง๋ฅผ ์ปดํฌ๋ํธ๋ฅผ ์ด์ฉํด์ ๋ง๋ค์ด์ค์ญ์์ค.์ค์: ์ปดํฌ๋ํธ์ฉ ํ์ผ์ .js ๋ง๊ณ .jsx ํ์ฅ์๋ก ์ง์ด์ผ Vite ํ๊ฒฝ์์ ์๋ฉ๋๋ค! โ ๏ธ์ผ๋ฐ HTML ์ฌ์ดํธ: HTML ํ์ผ ์ฌ๋ฌ ๊ฐ = ์ฌ๋ฌ ํ์ด์งReact: HTML ํ์ผ ํ๋๋ง
/event/one ํ์ด์ง์ /event/two ํ์ด์ง๋ฅผ nested routes๋ฅผ ์ฌ์ฉํด์ ๋ง๋ค์ด๋ด ์๋ค!React๋ HTML์ ์ด์๊ฒ ๋ง๋ค์ด์ฃผ๋ ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ผ ๋ฟ์ ๋๋ค. ๋ง๋ค ํ์ผ๋ค์ 95%๊ฐ .js ํ์ผ์ด๋ฏ๋ก ๋น์ทํ .js ํ์ผ๋ผ๋ฆฌ ๋ฌถ์ด์ ํด๋๋ฅผ ๊ตฌ์ฑํ๋ฉด ๋ฉ๋๋ค
์์ ํ ์คํธ๋ง ์์ผ๋ฉด ๋ฐ๋ฐํ๋๊น ์ค์ ์ํ ์ ๋ณด๋ฅผ ๋ฃ์ด๋ด ์๋ค!App.js:Detail.js:props ์ฌ์ฉ ์ด์ : Detail.js์์ shoes state๋ฅผ ๋ ๋ง๋ค๋ฉด ๋์ค์ ๋ ๊ตฐ๋ฐ ์์ ํด์ผ ํด์ ๋นํจ์จ์ ๋ฐ์ดํฐ ์ผ๊ด์ฑ ์ ์ง๋ฅผ ์ํด props ์ฌ์ฉ ๊ถ์ฅ โ ๏ธ๋ฌธ์ ์ :
Path Parameter: "๋ฌด์์" (๋ฆฌ์์ค ์๋ณ) ๐ท๏ธQuery String: "์ด๋ป๊ฒ" (๋ฆฌ์์ค ์ฒ๋ฆฌ ๋ฐฉ์) โ๏ธ๋ฆฌ์์ค ์์ฒด๋ฅผ ์๋ณํ ๋ ์ฌ์ฉํฉ๋๋ค./page?type=product&id=123 /search?category=electronics \`\`

Detail ํ์ด์ง ์์ ๋ ธ๋ ๋ฐ์ค ํ๋ ๋ง๋ค๊ณ , Detail ํ์ด์ง ๋ฐฉ๋ฌธ ํ 2์ด ํ์ ๋ฐ์ค๊ฐ ์ฌ๋ผ์ง๊ฒ ํด๋ณด์ญ์์ค.ํ: ๋์ ์ธ UI ์ด๋ป๊ฒ ๋ง๋ ๋ค๊ณ ํ๋์? ๐ค์ปดํฌ๋ํธ๋ ์ธ์์ด ์์ต๋๋ค! ์ฌ๋์ฒ๋ผ ํ์ด๋๊ณ , ์ด๋ค๊ฐ, ์ฃฝ์ต๋๋ค.์์ฑ (Mount) ๐ - ์ปดํฌ๋ํธ๊ฐ

Detail ํ์ด์ง์์ 2์ด ํ ๋ฐ์ค๊ฐ ์ฌ๋ผ์ง๊ฒ ๋ง๋ค๊ธฐ ๐๋์ ์ธ UI ๋ง๋ค ๋์ ๊ธฐ๋ณธ ์์น:1\. UI ์ํ๋ฅผ ์ ์ฅํ state ๋ง๋ค๊ธฐ ๐ง2\. state์ ๋ฐ๋ผ UI๊ฐ ์ด๋ป๊ฒ ๋ณด์ผ์ง ์์ฑํ๊ธฐ ๐จalert state๊ฐ true๋ฉด ๋ ธ๋๋ฐ์ค ๋ณด์ โ false๋ฉด ์๋ณด์