์ƒ๊ฐ/react

[์ฃผํŠน๊ธฐ ๊ณผ์ œ]

kyunghoonk00k 2022. 9. 30. 11:29
๋ฐ˜์‘ํ˜•

 

๐Ÿ” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์œ ์‚ฌ๋ฐฐ์—ด๊ณผ ๋ฐฐ์—ด์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ผ๊นŒ์š”?

์œ ์‚ฌ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–ค ๊ณผ์ •์„ ๊ฑฐ์ณ์•ผํ• ๊นŒ์š”?

 

๋ฐฐ์—ด :

ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•ด ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด๋‹คใ€‚

 

์œ ์‚ฌ ๋ฐฐ์—ด :

๋ฐฐ์—ด๊ณผ ์œ ์‚ฌํ•œ ๊ฐ์ฒด๋ฅผ ๋งํ•œ๋‹ค.

 

์œ ์‚ฌ ๋ฐฐ์—ด์€ ํ•จ์ˆ˜์—์„œ ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋กœ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ๋˜๋Š”, Array์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ๋‚ดํฌ๋˜์–ด์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ  ์‹ถ์ง€ ์•Š๊ฑฐ๋‚˜ Array์— ๋‚ดํฌ๋˜์–ด์žˆ์ง€ ์•Š์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

 

1. ์ˆซ์ž ํ˜•ํƒœ์˜ indexing์ด ๊ฐ€๋Šฅํ•  ๊ฒƒ

2. length ์†์„ฑ์„ ํฌํ•จํ•  ๊ฒƒ

์ˆ˜์ • ๊ณผ์ •:

1-1. ๊ฐ„์ ‘ํ˜ธ์ถœ ํ™œ์šฉ

1-2. RestํŒŒ๋ผ๋ฏธํ„ฐ ํ™œ์šฉ

1-3. Array.from ๋ฉ”์„œ๋“œ ํ™œ์šฉ

๋“ฑ์„ ํ™œ์šฉํ•˜์—ฌ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜์‹œ์ผœ ์ค€ ๋’ค ์š”์†Œ๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค.

 

๐Ÿ” ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ A์™€ ์ž์‹ ์ปดํฌ๋„ŒํŠธ B๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ A๋Š” state๋กœ {name: "๋ฅดํƒ„์ด"}๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ์ž์‹์ธ ์ปดํฌ๋„ŒํŠธ B์—๊ฒŒ name ๊ฐ’์„ ๋„˜๊ฒจ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ B๋Š” ๋ฐ›์•„์˜จ name์„ ํ™”๋ฉด์— ๋ฟŒ๋ ค์ฃผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ปดํฌ๋„ŒํŠธ A์˜ state๊ฐ€ {name: "์ง„๋„์‚ฌ์šฐ๋ฅด์Šค"}๋กœ ๋ฐ”๋€Œ์—ˆ์„ ๋•Œ, ์–ด๋–ค ๊ณผ์ •์„ ๊ฑฐ์ณ ๋ฐ”๋€ ๊ฐ’์„ ํ™”๋ฉด์— ๋ณด์—ฌ์ฃผ๋Š” ์ง€ ๋ผ์ดํ”„ ์‚ฌ์ดํด ํ๋ฆ„์„ ๊ทธ๋ ค๋ณผ๊นŒ์š”?

 

๋ผ์ดํ”„ ์‚ฌ์ดํด : ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง์„ ์ค€๋น„ํ•˜๋Š” ์ˆœ๊ฐ„๋ถ€ํ„ฐ, ํŽ˜์ด์ง€์—์„œ ์‚ฌ๋ผ์งˆ ๋•Œ๊นŒ์ง€ ๊ณผ์ •

- ์ปดํฌ๋„ŒํŠธ๋Š” ์ƒ์„ฑ๋˜๊ณ  -> ์ˆ˜์ •(์—…๋ฐ์ดํŠธ)๋˜๊ณ  ์‚ฌ๋ผ์ง„๋‹ค

- ์ƒ์„ฑ์€ ์ฒ˜์Œ์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค

- ์ˆ˜์ •(์—…๋ฐ์ดํŠธ) ๋˜๋Š” ๊ฒฝ์šฐ

1) props๊ฐ€ ๋ฐ”๋€” ๋•Œ

2) state๊ฐ€ ๋ฐ”๋€” ๋•Œ

3) ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์—…๋ฐ์ดํŠธ ๋˜์—ˆ์„ ๋•Œ ( ๋ฆฌ๋ Œ๋”๋ง ํ–ˆ์„ ๋•Œ )

4) ๊ฐ•์ œ๋กœ ์—…๋ฐ์ดํŠธ๋ฅผ ํ–ˆ์„ ๊ฒฝ์šฐ ( forceUpdate() )๋ฅผ ํ†ตํ•ด ๊ฐ•์ œ๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜ ์žˆ๋‹ค

-์ œ๊ฑฐ๋Š” ํŽ˜์ด์ง€๋ฅผ ์ด๋™ํ•˜๊ฑฐ๋‚˜, ์‚ฌ์šฉ์ž์˜ ํ–‰๋™ (์‚ญ์ œ ๋ฒ„ํŠผ ํด๋ฆญ)์œผ๋กœ ์ธํ•ด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ™”๋ฉด์—์„œ

์‚ฌ๋ผ์ง€๋Š” ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค)

 

----- ๋ผ์ดํ”„ ์‚ฌ์ดํด ํ๋ฆ„ -----

 

- **Mounting**: ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚จ

 

### Mounting

 

์ปดํฌ๋„ŒํŠธ์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜์–ด DOM ์ƒ์— ์‚ฝ์ž…๋˜๋Š” ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. Mounting์€ Lifecyle์ด ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ํ•œ ๋ฒˆ๋งŒ ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ๋ฉ”์„œ๋“œ๋“ค์ด ์ด ๋‹จ๊ณ„์—์„œ ์ˆœ์„œ๋Œ€๋กœ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

 

· **constructor**: ์ปดํฌ๋„ŒํŠธ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค ๋•Œ๋งˆ๋‹ค ์ƒ์„ฑ์ž ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

 

· static getDerivedStateFromProps

 

· **render**: ํ™”๋ฉด์— ํ‘œํ˜„๋  JSX๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ํ™”๋ฉด์— ๊ทธ๋ฆฝ๋‹ˆ๋‹ค.

 

· **componentDidMount**: ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ™”๋ฉด์— ๋ชจ๋‘ ๊ทธ๋ ค์ง„ ์ดํ›„ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

 

componentDidMount ๋ฉ”์„œ๋“œ๋Š” ์ฒซ ๋ Œ๋”๋ง ์ดํ›„ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์—”๋“œํฌ์ธํŠธ์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์™€์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด, API ํ˜ธ์ถœ์„ ํ•˜๊ธฐ ์ข‹์€ ์œ„์น˜์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ์˜ฌ ๋•Œ setState ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

- **Updating**: ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์—…๋ฐ์ดํŠธ๋จ

 

### Updating

 

props ๋˜๋Š” state๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๋Š” ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. ์•„๋ž˜ ๋ฉ”์„œ๋“œ๋“ค์ด ์ด ๋‹จ๊ณ„์—์„œ ์ˆœ์„œ๋Œ€๋กœ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

 

· static getDerivedStateFromProps

 

· shouldComponentUpdate

 

· **render**: ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์ž๋™์œผ๋กœ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ํ™”๋ฉด์„ ๋‹ค์‹œ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค.

 

· getSnapshotBeforeUpdate

 

· **componentDidUpdate**: ํ™”๋ฉด์ด ๋‹ค์‹œ ๊ทธ๋ ค์ง„ ์ดํ›„ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

 

- **Unmounting**: ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ™”๋ฉด์—์„œ ์‚ฌ๋ผ์ง

 

### Unmounting

 

์ปดํฌ๋„ŒํŠธ๊ฐ€ DOM ์ƒ์—์„œ ์ œ๊ฑฐ๋˜๋Š” ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.

 

·**componentWillUnmount**: ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ™”๋ฉด์—์„œ ์ œ๊ฑฐ๋˜๊ธฐ ์ „์— ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

 

 

### ํ๋ฆ„ ์„ค๋ช…

 

์ปดํฌ๋„ŒํŠธ A์—์„œ ๋ฅดํƒ„์ด๋ผ๋Š” state๋ฅผ ์ง„๋„์‚ฌ์šฐ๋ฅด์Šค๋ณ€๊ฒฝ ->

 

๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ Updating์ด ๋ฐœ์ƒ ->

 

shouldComponentUpdate ๊ฐ€ ์‹คํ–‰ ->

 

๋ฐ”๋€ props๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์˜ ๋ Œ๋”๋ง ->

 

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฐ”๋€ props๋ฅผ ์ด์–ด๋ฐ›์•„ ์ปดํฌ๋„ŒํŠธ B์˜ ๋ Œ๋”๋ง์ด ์‹คํ–‰๋จ

 

 

 

๐Ÿ” ์–‘๋ฐฉํ–ฅ ๋ฐ”์ธ๋”ฉ์€ ๋ฌด์—‡์ผ๊นŒ์š”?

์–‘๋ฐฉํ–ฅ ๋ฐ”์ธ๋”ฉ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ฆฌ๋ Œ๋”๋ง์ด ์–ด๋–ป๊ฒŒ ์ด๋ฃจ์–ด์งˆ ์ง€ ๊ทธ๋ ค๋ณด์„ธ์š”.

(๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ A์™€ ์ž์‹ ์ปดํฌ๋„ŒํŠธ B๊ฐ€ ์žˆ์Œ์„ ๊ฐ€์ •ํ•˜๊ณ  ๊ทธ๋ ค๋ด…์‹œ๋‹ค.)

 

๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์ด๋ž€?

๋‘ ๋ฐ์ดํ„ฐ ํ˜น์€ ์ •๋ณด์˜ ์†Œ์Šค๋ฅผ ์ผ์น˜์‹œํ‚ค๋Š” ๊ธฐ๋ฒ•์œผ๋กœ, ํ™”๋ฉด์— ๋ณด์ด๋Š” ๋ฐ์ดํ„ฐ์™€ ๋ธŒ๋ผ์šฐ์ € ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ(์—ฌ๋Ÿฌ๊ฐœ์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด)๋ฅผ ์ผ์น˜์‹œํ‚ค๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

 

์–‘๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ

 

์žฅ์  : ์ฝ”๋“œ์˜ ์‚ฌ์šฉ๋ฉด์—์„œ ์ฝ”๋“œ๋Ÿ‰์„ ํฌ๊ฒŒ ์ค„์—ฌ์คŒ

๋‹จ์  : ๋ณ€ํ™”์— ๋”ฐ๋ผ DOM ๊ฐ์ฒด ์ „์ฒด๋ฅผ ๋ Œ๋”๋งํ•ด์ฃผ๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๊ฟ”์ฃผ๋ฏ€๋กœ, ์„ฑ๋Šฅ์ด ๊ฐ์†Œ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Œ

์ปจํŠธ๋กค๋Ÿฌ์—์„œ model์ด ๋ณ€๊ฒฝ๋จ -> view๋ณ€๊ฒฝ๋จ

view์—์„œ scope model์ด ๋ณ€๊ฒฝ๋จ -> ์ปจํŠธ๋กค๋Ÿฌ์—์„œ model์ด ๋ณ€๊ฒฝ๋จ

 

์ด๋ ‡๊ฒŒ ์ปจํŠธ๋กค๋Ÿฌ์™€ ๋ทฐ ์–‘์ชฝ์˜ ๋ฐ์ดํ„ฐ ์ผ์น˜๊ฐ€ ๋ชจ๋‘ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด ์–‘๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์ด๋‹ค. ๋ฐ์ดํ„ฐ์˜ ๋ณ€ํ™”๋ฅผ ๊ฐ์ง€ํ•ด ํ…œํ”Œ๋ฆฟ๊ณผ ๊ฒฐํ•ฉํ•ด ํ™”๋ฉด์„ ๊ฐฑ์‹ , ํ™”๋ฉด์˜ ์ž…๋ ฅ์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐฑ์‹ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. (HTML -> JS, JS -> HTML ์–‘์ชฝ ๋ชจ๋‘ ๊ฐ€๋Šฅ)

 

์–‘๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์€ ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ์„ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ๊ฐ์ง€ํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€, ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ์‹œ์ ์— DOM ๊ฐ์ฒด์— ๋ Œ๋”๋ง์„ ํ•ด์ฃผ๊ฑฐ๋‚˜ ํŽ˜์ด์ง€ ๋‚ด์—์„œ ๋ชจ๋ธ์˜ ๋ณ€๊ฒฝ์„ ๊ฐ์ง€ํ•ด JS ์‹คํ–‰๋ถ€์—์„œ ๋ณ€๊ฒฝํ•œ๋‹ค. ์ž…๋ ฅ๋œ ๊ฐ’์ด๋‚˜ ๋ณ€๊ฒฝ๋œ ๊ฐ’์— ๋”ฐ๋ผ ๋‚ด์šฉ์ด ๋ฐ”๋กœ ๋ฐ”๋€Œ๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ ์ฒดํฌํ•ด์ฃผ์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

 

์–‘๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ณต์žก๋„๊ฐ€ ์ฆ๊ฐ€ํ•˜๋ฉด ์ฆ๊ฐ€ํ• ์ˆ˜๋ก ๋น›์„ ๋ฐœํ•œ๋‹ค. ์ˆ˜๋งŽ์€ ์ฝ”๋“œ์˜ ์–‘์„ ์ค„์—ฌ์ค„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์œ ์ง€๋ณด์ˆ˜๋‚˜ ์ฝ”๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ๋งค์šฐ ์‰ฝ๊ฒŒ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 

 

 

๐Ÿ” event listener๋Š” ๋“ฑ๋ก๋˜๋ฉด ๋ฐ˜๋“œ์‹œ ํ•ด์ œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ™”๋ฉด์—์„œ ์‚ฌ๋ผ์งˆ ๋•Œ(unmount ๋  ๋•Œ) event listener๋ฅผ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค. (componentWillUnmount์—์„œ์š”!)

๊ทธ๋Ÿผ ๋ผ์ดํ”„์‚ฌ์ดํด ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” event listener๋ฅผ ํ•ด์ œํ•  ๋•Œ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ์š”?

 

useEffect

ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” ๊ฐ๊ฐ์˜ ๋ผ์ดํ”„์‚ฌ์ดํด ๋ฉ”์†Œ๋“œ๋ฅผ useEffect ํ•˜๋‚˜๋กœ ํ†ต์ผ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ๋Œ€์‹  dependency๋ฅผ ์„ ์–ธํ•˜์—ฌ ์‹œ์ ์„ ๊ตฌ๋ถ„ํ•œ๋‹ค.

 

useEffect(() => {

console.log('hi')

}, [/* dependency ์„ ์–ธํ•˜๋Š” ๊ณณ */])

๋นˆ ๋ฐฐ์—ด์„ ์„ ์–ธํ•˜๋ฉด ์ตœ์ดˆ ๋กœ๋“œ์‹œ์—๋งŒ ๋ Œ๋”๋ง์ด ๋œ๋‹ค.

 

์ด๋ฒคํŠธ ํ•ด์ œํ•˜๊ธฐ

์ด๋ฒคํŠธ๋ฅผ ๋“ฑ๋กํ•˜๊ณ  ๋‚œ ๋’ค ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์–ธ๋งˆ์šดํŠธ ๋  ๋•Œ ๊ผญ ์ด๋ฒคํŠธ ๋“ฑ๋ก์„ ํ•ด์ œํ•ด์ฃผ์–ดํ– ํ•œ๋‹ค. ํ•จ์ˆ˜ํ˜• ํด๋ž˜์Šค์—์„œ๋Š” useEffect์˜ ๋‚ด๋ถ€ ํ•จ์ˆ˜์˜ return๊ฐ’์œผ๋กœ removeEventListener๋ฅผ ํ†ตํ•ด ํ•ด์ œํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

useEffect(() => {

document.addEventListener();



return () => {

document.removeEventListener();

}

}, [])

 

 

๐Ÿ” ๋ฆฌ์•กํŠธ์—์„œ๋Š” DOM ์š”์†Œ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ์ฃผ๋กœ ref๋ฅผ ์”๋‹ˆ๋‹ค.

domcument.getElementsByClassName ๋“ฑ์„ ์“ฐ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ref๋ฅผ ์“ฐ๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ์š”?

 

ref๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ?

id๋Š” ์œ ์ผํ•ด์•ผ ํ•˜์ง€๋งŒ ์ปดํฌ๋„ŒํŠธ ์žฌ์‚ฌ์šฉ์„ ํ•œ๋‹ค๋ฉด ์ค‘๋ณต๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค.

 

ref๋Š” ์ „์—ญ์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๊ณ  ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ๋งŒ ์ž‘๋™ํ•œ๋‹ค.

 

์–ด๋–จ ๋•Œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€?

DOM์„ ๊ผญ ์ง์ ‘์ ์œผ๋กœ ๊ฑด๋“œ๋ ค์•ผ ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

 

ํŠน์ • input์— ํฌ์ปค์Šค ์ฃผ๊ธฐ

์Šคํฌ๋กค ๋ฐ•์Šค ์กฐ์ž‘ํ•˜๊ธฐ

Canvas ์š”์†Œ์— ๊ทธ๋ฆผ ๊ทธ๋ฆฌ๊ธฐ ๋“ฑ

 

์„ ์–ธ์ ์œผ๋กœ ํ•ด๊ฒฐ๋  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์—์„œ๋Š” ref ์‚ฌ์šฉ์„ ์ง€์–‘ํ•ด์•ผํ•œ๋‹ค.

 

ref์˜ ์‚ฌ์šฉ์„ ์ตœ๋Œ€ํ•œ ์ค„์—ฌ์•ผ ํ•œ๋‹ค๊ณ  ๋ช…์‹œ๋˜์–ด์žˆ๋‹ค.

 

 

 

 

๐Ÿ” SPA ๋ฐฉ์‹๊ณผ MPA ๋ฐฉ์‹์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

 

SPA vs MPA

- SPA(Single Page Application)๋Š” ํ•œ ๊ฐœ(Single)์˜ Page๋กœ ๊ตฌ์„ฑ๋œ Application์ด๋‹ค.

MPA(Multiple Page Application)๋Š” ์—ฌ๋Ÿฌ ๊ฐœ(Single)์˜ Page๋กœ ๊ตฌ์„ฑ๋œ Application์ด๋‹ค.

- MPA๋Š” ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญํ•  ๋•Œ๋งˆ๋‹ค ์ •์  ๋ฆฌ์†Œ์Šค๊ฐ€ ๋‹ค์šด๋กœ๋“œ๋œ๋‹ค. ๋งค๋ฒˆ ์ „์ฒด ํŽ˜์ด์ง€๊ฐ€ ๋‹ค์‹œ ๋ Œ๋”๋ง ๋œ๋‹ค.

๋ฐ˜๋ฉด SPA๋Š” ์›น ์—ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ•„์š”ํ•œ ๋ชจ๋“  ์ •์  ๋ฆฌ์†Œ์Šค๋ฅผ ์ตœ์ดˆ ํ•œ ๋ฒˆ์— ๋‹ค์šด๋กœ๋“œํ•œ๋‹ค.

๊ทธ ์ดํ›„ ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€ ์š”์ฒญ์ด ์žˆ์„ ๋•Œ, ํŽ˜์ด์ง€ ๊ฐฑ์‹ ์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์ „๋‹ฌ ๋ฐ›์•„์„œ ํŽ˜์ด์ง€๋ฅผ ๊ฐฑ์‹ ํ•œ๋‹ค.

- ๊ทธ๋ž˜์„œ SPA๋ฅผ CSR(Client Side Rendering) ๋ฐฉ์‹์œผ๋กœ ๋ Œ๋”๋งํ•œ๋‹ค๊ณ  ๋งํ•œ๋‹ค.

๊ทธ๋ž˜์„œ MPA๋ฅผ SSR(Server Side Rendering) ๋ฐฉ์‹์œผ๋กœ ๋ Œ๋”๋งํ•œ๋‹ค๊ณ  ๋งํ•œ๋‹ค.

 

MPA(Multiple Page Application)

- ์—ฌ๋Ÿฌ ๊ฐœ(Single)์˜ Page๋กœ ๊ตฌ์„ฑ๋œ Application์ด๋‹ค.

- MPA๋Š” SSR(Server Side Application) ๋ฐฉ์‹์œผ๋กœ ๋ Œ๋”๋งํ•œ๋‹ค.

์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญํ•  ๋•Œ๋งˆ๋‹ค ์„œ๋ฒ„์—์„œ ๋ Œ๋”๋ง๋œ ์ •์  ๋ฆฌ์†Œ์Šค(HTML, CSS, JavaScript)๊ฐ€ ๋‹ค์šด๋กœ๋“œ๋œ๋‹ค.

ํŽ˜์ด์ง€ ์ด๋™ํ•˜๊ฑฐ๋‚˜ ์ƒˆ๋กœ๊ณ ์นจํ•˜๋ฉด ์ „์ฒด ํŽ˜์ด์ง€๋ฅผ ๋‹ค์‹œ ๋ Œ๋”๋งํ•œ๋‹ค.

 

๐Ÿ‘ MPA ์žฅ์ 

1. SEO ๊ด€์ ์—์„œ ์œ ๋ฆฌํ•˜๋‹ค.

- MPA๋Š” ์™„์„ฑ๋œ ํ˜•ํƒœ์˜ HTML ํŒŒ์ผ์„ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›๋Š”๋‹ค.

๋”ฐ๋ผ์„œ ๊ฒ€์ƒ‰์—”์ง„์ด ํŽ˜์ด์ง€๋ฅผ ํฌ๋กค๋งํ•˜๊ธฐ์— ์ ํ•ฉํ•˜๋‹ค.

2. ์ฒซ ๋กœ๋”ฉ ๋งค์šฐ ์งง๋‹ค.

- ์„œ๋ฒ„์—์„œ ์ด๋ฏธ ๋ Œ๋”๋งํ•ด ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

- ๊ทธ๋Ÿฌ๋‚˜ ํด๋ผ์ด์–ธํŠธ๊ฐ€ JS ํŒŒ์ผ์„ ๋ชจ๋‘ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์ ์šฉํ•˜๊ธฐ์ „ ๊นŒ์ง€๋Š” ๊ฐ๊ฐ์˜ ๊ธฐ๋Šฅ์€ ๋™์ž‘ํ•˜์ง€์•Š๋Š”๋‹ค.

 

๐Ÿ‘Ž MPA ๋‹จ์ 

1. ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๋ฅผ ์ด๋™ํ•˜๋ฉด ๊นœ๋นก์ธ๋‹ค. (UX)

- ๋งค ํŽ˜์ด์ง€ ์š”์ฒญ๋งˆ๋‹ค ๋ฆฌ๋กœ๋”ฉ(์ƒˆ๋กœ๊ณ ์นจ) ๋ฐœ์ƒ.

์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญํ•  ๋•Œ๋งˆ๋‹ค ์ „์ฒด ํŽ˜์ด์ง€๋ฅผ ๋‹ค์‹œ ๋ Œ๋”๋งํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

2. ํŽ˜์ด์ง€ ์ด๋™ ์‹œ ๋ถˆํ•„์š”ํ•œ ํ…œํ”Œ๋ฆฟ๋„ ์ค‘๋ณตํ•ด์„œ ๋กœ๋”ฉ (์„ฑ๋Šฅ)

3. ์„œ๋ฒ„ ๋ Œ๋”๋ง์— ๋”ฐ๋ฅธ ๋ถ€ํ•˜

4. ๋ชจ๋ฐ”์ผ ์•ฑ ๊ฐœ๋ฐœ ์‹œ ์ถ”๊ฐ€์ ์ธ ๋ฐฑ์—”๋“œ ์ž‘์—… ํ•„์š” (์ƒ์‚ฐ์„ฑ)๊ฐœ๋ฐœ์ด ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

 
๋ฐ˜์‘ํ˜•