๐๋์ค์ ๋ชฉ์ฐจ๋ณ ์ ๋ฆฌํด์ ํฌ์คํ ํ๊ฒ ์ง๋ง, ๊ฐ์ธ ๊ณต๋ถ ํ๋ฉด์ ์ ๋ฆฌํ ๊ฒธ ์์ฑํด์ผ๊ฒ ๋จ ์๊ฐ์ด ๋ค์๊ณ ๋ฐ๋ก ์ค์ฒํ๊ธฐ ์ํด ์์ฑํ๋ค.
React.Advantage
React.์ฅ์
- SPA(Single Page Application)๋ง๋ค๊ธฐ์ ์ฉ์ดํจ
- SPA: ๋ธ๋ผ์ฐ์ ์ ์ต์ด ํ๋ฒ ํ์ด์ง ์ ์ฒด๋ฅผ ๋ถ๋ฌ์ค๊ณ , ์ดํ ํน์ ๋ถ๋ถ๋ง Ajax๋ฅผ ํตํด ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ํ๋ ํ์
- Ajax(Asynchronous Javascript And XML) : JavaScript๋ฅผ ์ฌ์ฉํ ๋น๋๊ธฐ ํต์ , ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ XML ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ธฐ์ . ์ฆ, JavaScript๋ฅผ ํตํด์ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋๊ฒ - HTML ์ฌ ์ฌ์ฉ์ฑ์ด ์ฉ์ดํจ
- ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ๋ฅผ ์ฌ์ฉ ์ฝ๋ ์ฌ ์ฌ์ฉ์ด ๋๊ณ , ์ ์ง ๋ณด์๊ฐ ์ฌ์
- ์ฑ๋ฅ์ด ์ข์ : ๊ฐ์ ๋์ ์ฌ์ฉํ ๋น ๋ฅธ ์
๋ฐ์ดํธ, ๋ ๋๋ง์ ๊ฐ๋ฅํ๊ฒ ํจ
- ๊ฐ์ ๋(Vitual DOM) :๊ฐ์ ๋์ ๋ฉ๋ชจ๋ฆฌ ์์ ์กด์ฌํ๋ ๊ฐ์์ DOM, ๋ณ๊ฒฝ ์ฌํญ์ ์ค์ DOM์ ์ ์ฉํ๊ธฐ ์ ๊ฐ์ ๋ ์์์ ์ฒ๋ฆฌํด ๋ถํ์ํ ์ ๋ฐ์ดํธ๋ฅผ ์ต์ํ, ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ ํฅ์ ๋ฐ ์ฌ์ฉ์ ๊ฒฝํ์ด ๊ฐ์
React. Disadvantage
React.๋จ์
- JSX๋ฌธ๋ฒ
- ์ผ๋ฐ์ ์ธ HTML๊ณผ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์ฒ์ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์๋ค์๊ฒ ํ์ต ๊ณก์ ์ด ๋์ ์ ์๋ค - ๋ณด์ผ๋ฌํ๋ ์ดํธ ์ฝ๋(๋ฐ๋ณต์ ์ธ ์ฝ๋)๊ฐ ๋ง์ด ๋ฐ์ํ ์ ์๋ค
- ์ํ ๊ด๋ฆฌ๊ฐ ๋ณต์กํด์ง ์ ์๋ค
- ๋ฌ๋ ์ปค๋ธ๊ฐ ๋์ ํธ์ ์๋๋ค
* ์ด๋ฌํ ๋จ์ ๋ค์ React๋ฅผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์๋ค์๊ฒ๋ ๊ทธ๋ฆฌ ํฐ ๋ฌธ์ ๊ฐ ๋์ง ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์์ ์๋ค. *
Add React.Project
React ํ๋ก์ ํธ ์์ฑ
๐ํ๋ก์ ํธ ํด์ Shift+์ฐํด๋ฆญ์ผ๋ก PowerShell๋ก ์ด์ด 'npx create-react-app ํ๋ก์ ํธ๋ช
' ์์ฑ
*ํ๋ก์ ํธ๋ช ์ ๋ณธ์ธ์ด ์ํ๋ ํ๋ก์ ํธ๋ช ์ ์์ฑํ์๋ผ๋ ๋ง์ใ ใ
โป ERROR ์ window๊ฒฝ์ฐ
- (ํ๊ฐ๋์ง ์์ ์คํฌ๋ฆฝํธ ~): ๊ฒ์์ PowerShell ๊ฒ์ ํ ๊ด๋ฆฌ์๋ก ์คํ โถ Set-ExecutionPolicy Unrestricted ์
๋ ฅ ํ ์ํฐ (Y)์ ํ ํ ๋ค์ ์
๋ ฅํด๋ณด๊ธฐ
- (The engine "node" is incompatible with this module): nodejs ๋ฒ์ ์ด ๋ฎ๊ฑฐ๋ ๋๋ค๋ ๋ป. nodejs๋ฅผ ์๊ตฌํ๋ ๋ฒ์ ์ผ๋ก ์ฌ์ค์น
โป ERROR ์ Mac๊ฒฝ์ฐ
- ( permission์ด ์์ด์): sudo๋ฅผ ๋ถ์ฌ ์ฌ์ฉ ex) sudo npx create-react-app ํ๋ก์ ํธ๋ช โถ ๋งฅ๋ถ ๋น๋ฒ ์ ๋ ฅํ๋ฉด ์ฌ์ฉ (Y)์ ํ
JSX(JavaScript XML)?
1. JavaScript์ XML์ ์ถ๊ฐํ์ฌ ํ์ฅํ ๋ฌธ๋ฒ
- XML(eXtensible Markup Language) : XML์ ๋งํฌ์ ์ธ์ด๋ฅผ ์ ์ํ๊ธฐ ์ํ ์ธ์ด์ด๋ฉฐ, HTML์ ๋ฐ์ดํฐ๋ฅผ ํํํ๋ ๋งํฌ์ ์ธ์ด๋ผ๋ฉด, XML์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ์ ํ๋ ์ธ์ด์ด๋ค.
2. React “๊ฐ์ฒด(element)”๋ฅผ ์์ฑํ๋ฉฐ, ์ด ๊ฐ์ฒด๋ DOM๊ฐ์ฒด์ ๋ฌ๋ฆฌ ์ผ๋ฐ ๊ฐ์ฒด(plain object)์ด๋ค.
JSX๋ฌธ๋ฒ
- class๋ฅผ className์ผ๋ก ์ฌ์ฉ
- ๋ณ์ ์ฌ์ฉ ์ ์ค๊ดํธ{} ์์ ์์ฑ
- HTML์์ ์์ ์คํ์ผ ์ง์ ์ style = {{ color: 'red' }}
- divํ๊ทธ๋ก ๊ฐ์ธ์ฃผ๊ธฐ : ํ๋์ DOMํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ด๋ฃจ์ด์ผ ํจ
๐ 1์ผ์ฐจ์ ์ฌ์ฉํ ๋ฌธ๋ฒ์ ๋ฆฌ ๐
spread ๋ฌธ๋ฒ: ๊ฐ์ฒด ํน์ ๋ฐฐ์ด์ ํผ์น ์ ์๋ค (์๋ณธ์ ๊ฑด๋ค์ด์ง ์๊ณ , ๋ณต์ฌ๋ณธ์ ๋ง๋ค ์ ์๋ ์ฅ์ )
const numbers = [1, 2, 3];
const spreadNumbers = [...numbers, 28];
console.log(spreadNumbers); //[1, 2, 3, 28]
// ์ฐ์์ผ๋ก๋ ๊ฐ๋ฅ
const numbers = [1, 2, 3];
const spreadNumbers = [...numbers, 1000, ...numbers];
console.log(spreadNumbers); // [1, 2, 3, 1000, 1, 2, 3]
rest๋ฌธ๋ฒ: ๊ฐ๋ณ ์์๋ค์ ๋ชจ์์ ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด๋ก ๋ฌถ๋ ์ญํ
const numbers = [1, 2, 3];
const spreadNumbers = [...numbers, 28];
console.log(spreadNumbers); //[1, 2, 3, 28]
// ์ฐ์์ผ๋ก๋ ๊ฐ๋ฅ
const numbers = [1, 2, 3];
const spreadNumbers = [...numbers, 1000, ...numbers];
console.log(spreadNumbers); // [1, 2, 3, 1000, 1, 2, 3]
React๋ฌธ๋ฒ์ ์๋์ง๋ง ๊ฐ์๋ณด๋ฉด์ ๊ณต๋ถ ํ์ด์ใ
ใ