๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
React.js

[React] ๋ฆฌ์•กํŠธ ๊ณต๋ถ€ 1์ผ์ฐจ

by SeongwooLee 2023. 10. 23.

 

๐Ÿ“๋‚˜์ค‘์— ๋ชฉ์ฐจ๋ณ„ ์ •๋ฆฌํ•ด์„œ ํฌ์ŠคํŒ…ํ•˜๊ฒ ์ง€๋งŒ, ๊ฐœ์ธ ๊ณต๋ถ€ ํ•˜๋ฉด์„œ ์ •๋ฆฌํ•  ๊ฒธ ์ž‘์„ฑํ•ด์•ผ๊ฒ ๋‹จ ์ƒ๊ฐ์ด ๋“ค์—ˆ๊ณ  ๋ฐ”๋กœ ์‹ค์ฒœํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์„ฑํ•œ๋‹ค.

 


 

React.Advantage
React.์žฅ์ 

  1. SPA(Single Page Application)๋งŒ๋“ค๊ธฐ์— ์šฉ์ดํ•จ
    - SPA: ๋ธŒ๋ผ์šฐ์ €์— ์ตœ์ดˆ ํ•œ๋ฒˆ ํŽ˜์ด์ง€ ์ „์ฒด๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ณ , ์ดํ›„ ํŠน์ • ๋ถ€๋ถ„๋งŒ Ajax๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ ํ•˜๋Š” ํ˜•์‹
    - Ajax(Asynchronous Javascript And XML) : JavaScript๋ฅผ ์‚ฌ์šฉํ•œ ๋น„๋™๊ธฐ ํ†ต์‹ , ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์— XML ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ธฐ์ˆ . ์ฆ‰, JavaScript๋ฅผ ํ†ตํ•ด์„œ ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๋Š”๊ฒƒ
  2. HTML ์žฌ ์‚ฌ์šฉ์„ฑ์ด ์šฉ์ดํ•จ
  3. ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‚ฌ์šฉ ์ฝ”๋“œ ์žฌ ์‚ฌ์šฉ์ด ๋†’๊ณ , ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ์‰ฌ์›€
  4. ์„ฑ๋Šฅ์ด ์ข‹์Œ : ๊ฐ€์ƒ ๋”์„ ์‚ฌ์šฉํ•œ ๋น ๋ฅธ ์—…๋ฐ์ดํŠธ, ๋ Œ๋”๋ง์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ
    -  ๊ฐ€์ƒ ๋”(Vitual DOM) :๊ฐ€์ƒ ๋”์€ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์— ์กด์žฌํ•˜๋Š” ๊ฐ€์ƒ์˜ DOM,
    ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์‹ค์ œ DOM์— ์ ์šฉํ•˜๊ธฐ ์ „ ๊ฐ€์ƒ ๋” ์ƒ์—์„œ ์ฒ˜๋ฆฌํ•ด ๋ถˆํ•„์š”ํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ์ตœ์†Œํ™”, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ ๋ฐ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ๊ฐœ์„ 

 

React. Disadvantage
React.๋‹จ์ 

  1. JSX๋ฌธ๋ฒ•
    - ์ผ๋ฐ˜์ ์ธ HTML๊ณผ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜์Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ํ•™์Šต ๊ณก์„ ์ด ๋†’์„ ์ˆ˜ ์žˆ๋‹ค
  2. ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ(๋ฐ˜๋ณต์ ์ธ ์ฝ”๋“œ)๊ฐ€ ๋งŽ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค
  3. ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค
  4. ๋Ÿฌ๋‹ ์ปค๋ธŒ๊ฐ€ ๋†’์€ ํŽธ์€ ์•„๋‹ˆ๋‹ค

* ์ด๋Ÿฌํ•œ ๋‹จ์ ๋“ค์€ 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๋ฌธ๋ฒ•์€ ์•„๋‹ˆ์ง€๋งŒ ๊ฐ•์˜๋ณด๋ฉด์„œ ๊ณต๋ถ€ ํ–ˆ์–ด์š”ใ…Žใ…Ž