0906 TIL React

๋ƒํ•˜ํ˜ธํ›„ยท2021๋…„ 9์›” 6์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
38/101

React ๋ฐ์ดํ„ฐ ํ๋ฆ„

๐Ÿ™†โ€โ™€๏ธReact์—์„œ์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„, ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.
๐Ÿ™†โ€โ™€๏ธ์–ด๋–ค ์ปดํฌ๋„ŒํŠธ์— state๊ฐ€ ์œ„์น˜ํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
๐Ÿ™†โ€โ™€๏ธState ๋Œ์–ด์˜ฌ๋ฆฌ๊ธฐ์˜ ๊ฐœ๋…์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

์ž์‹์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ถ€๋ชจ์ปดํฌ๋„ŒํŠธ๋กœ๋ถ€ํ„ฐ ์ƒํƒœ๋ณ€๊ฒฝํ•จ์ˆ˜๋ฅผ ๋ฐ›์•„์˜จ๋‹ค. ์ž์‹์ปดํฌ๋„ŒํŠธ๊ฐ€ props๋กœ ๋ฐ›์•„์˜จ ์ƒํƒœ๋ณ€๊ฒฝํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด์„œ ๋ถ€๋ชจ์ปดํฌ๋„ŒํŠธ์˜ state๋ฅผ ๋ณ€๊ฒฝ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ™†โ€โ™€๏ธ์ƒํƒœ ๋ณ€๊ฒฝ ํ•จ์ˆ˜๊ฐ€ ์ •์˜๋œ ์ปดํฌ๋„ŒํŠธ์™€, ์ƒํƒœ ๋ณ€๊ฒฝ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‹ค๋ฆ„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

Effect Hook

๐Ÿ™†โ€โ™€๏ธSide effect๊ฐ€ ์–ด๋–ค ์˜๋ฏธ์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
๐Ÿ™†โ€โ™€๏ธReact ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ side effect๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌํ•ด์„œ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค. (๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ํ‘œํ˜„ ์˜์—ญ ๊ตฌ๋ถ„)
๐Ÿ™†โ€โ™€๏ธSide effect์˜ ์˜ˆ๋ฅผ ๋“ค ์ˆ˜ ์žˆ๋‹ค.
๐Ÿ™†โ€โ™€๏ธEffect Hook์„ ์ด์šฉํ•ด ๋น„๋™๊ธฐ ํ˜ธ์ถœ ๋ฐ AJAX ์š”์ฒญ๊ณผ ๊ฐ™์€ side effect๋ฅผ React ์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
๐Ÿ™†โ€โ™€๏ธEffect Hook์—์„œ์˜ dependency array ์‚ฌ์šฉ๋ฒ•์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.
๐Ÿ™†โ€โ™€๏ธ์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ ๋„คํŠธ์›Œํฌ ์š”์ฒญ์‹œ, ๋กœ๋”ฉ ํ™”๋ฉด๊ณผ ๊ฐ™์ด ๋ณด๋‹ค ๋‚˜์€ UI๋ฅผ ๋งŒ๋“œ๋Š” ๋ฒ•์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹จ ํ•œ๋ฒˆ๋งŒ ์‹คํ–‰๋˜๋Š” Effect ํ•จ์ˆ˜

  1. ๋นˆ ๋ฐฐ์—ด ๋„ฃ๊ธฐ useEffect(ํ•จ์ˆ˜, [])

์ฒ˜์Œ ํ™”๋ฉด์ด ๋ณด์ผ๋•Œ(์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ฒ˜์Œ ๋ Œ๋”๋ง๋  ๋•Œ)์—๋งŒ ํ•œ๋ฒˆ ์‹คํ–‰์ด๋œ๋‹ค.
์™ธ๋ถ€ API๋ฅผ ํ†ตํ•ด ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐ›์•„์˜ค๊ณ  ๋”์ด์ƒ API ํ˜ธ์ถœ์ด ํ•„์š”ํ•˜์ง€ ์•Š์„ ๋•Œ์— ์‚ฌ์šฉํ•œ๋‹ค.

  1. ์•„๋ฌด๊ฒƒ๋„ ๋„ฃ์ง€ ์•Š๊ธฐ (๊ธฐ๋ณธ ํ˜•ํƒœ) useEffect(ํ•จ์ˆ˜)

๊ธฐ๋ณธ ํ˜•ํƒœ์˜ useEffect๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ฒ˜์Œ ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜, props๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๊ฑฐ๋‚˜, ์ƒํƒœ(state)๊ฐ€ ์—…๋ฐ์ดํŠธ๋  ๋•Œ effect ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

Pure function ์ˆœ์ˆ˜ํ•จ์ˆ˜

์–ด๋– ํ•œ ์ „๋‹ฌ ์ธ์ž๊ฐ€ ์ฃผ์–ด์งˆ ๊ฒฝ์šฐ, ํ•ญ์ƒ ๋˜‘๊ฐ™์€ ๊ฐ’์ด ๋ฆฌํ„ด๋จ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ํ•จ์ˆ˜์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.
ํ•จ์ˆ˜์˜ ์ž…๋ ฅ์ด ์•„๋‹Œ ๋‹ค๋ฅธ ๊ฐ’์ด ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ฒฝ์šฐ, ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋ผ๊ณ  ๋ถ€๋ฅผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๐Ÿ™†โ€โ™€๏ธ Math.random()์€ ์ˆœ์ˆ˜ ํ•จ์ˆ˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์™œ์ผ๊นŒ์š”? ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๐Ÿ™†โ€โ™€๏ธ ์–ด๋–ค ํ•จ์ˆ˜๊ฐ€ fetch API๋ฅผ ์ด์šฉํ•ด AJAX ์š”์ฒญ์„ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ด…์‹œ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” ์ˆœ์ˆ˜ ํ•จ์ˆ˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์™œ์ผ๊นŒ์š”?

  1. ์—๋Ÿฌ๊ฐ€๋‚ ์ง€ ์›ํ•˜๋Š” ๊ฐ’์ด ์ „๋‹ฌ๋ ์ง€ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๋‹ค.
  2. fetch๋กœ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋Š” ๊ฐ€๊ณต์„ ํ•˜๊ฒŒ๋˜์–ด์žˆ๋‹ค. ๊ทธ๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ๋˜๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ํ•จ์ˆ˜์— ์˜ํ–ฅ์„ ์ค€๋‹ค.

์กฐ๊ฑด๋ถ€ ์‹คํ–‰ํŽ˜์ด์ง€์—์„œ useEffect๋ฅผ ์“ฐ๋ฉด ๋ฌดํ•œ๋ฃจํ”„๊ฐ€ ๊ฑธ๋ฆฐ ์ด์œ 

useEffect(ํ•จ์ˆ˜)์ด๋ ‡๊ฒŒ๋งŒ ์ ํ˜€์ ธ์žˆ์–ด์„œ ์ด ํ˜•ํƒœ๊ฐ€ ๋ฌดํ•œ๋ฃจํ”„๋ฅผ ์ผ์œผํ‚ค๋Š”์ค„์•Œ๊ณ  ์ฒ˜์Œ์— ์ฐฉ๊ฐํ–ˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ useEffect์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ์—ˆ๋‹ค. useEffect๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ฒฝ์šฐ๋Š” ์„ธ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.
1. ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ฒ˜์Œ ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜
2. props๊ฐ€ ์—…๋ฐ์ดํŠธ ๋˜๊ฑฐ๋‚˜
3. state๊ฐ€ ์—…๋ฐ์ดํŠธ ๋  ๋•Œ์ด๋‹ค.

์˜ˆ์ œ์ฝ”๋“œ์—์„œ [filter]๋ฅผ ์ง€์šฐ๋ฉด ๋ฌดํ•œ ๋ฃจํ”„๊ฐ€ ๊ฑธ๋ฆฌ๋Š” ์ด์œ ๋Š” useEffect ์ž์ฒด ๋•Œ๋ฌธ์ด ์•„๋‹ˆ๋ผ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ž๊พธ ๋ Œ๋”๋ง๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
๊ณผ์ •์€ ์ด๋ ‡๋‹ค. ์ฒ˜์Œ์— ํ™”๋ฉด์ด ๋ณด์ธ๋‹ค(์ฒซ ๋ Œ๋”๋ง) -> useEffect๊ฐ€ ์‹คํ–‰๋œ๋‹ค. -> filter๋ผ๋Š” state์˜ ์ƒํƒœ๊ฐ€ setProverbsํ•จ์ˆ˜์— ์˜ํ•ด์„œ ๋ณ€๊ฒฝ๋œ๋‹ค. -> state๊ฐ€ ๋ณ€ํ•œ๋‹ค. -> ๋˜ ๋ Œ๋”๋ง ๋œ๋‹ค. ์ด๊ฒŒ ๋ฌดํ•œ๋ฐ˜๋ณต๋˜์–ด์„œ ์ฝ˜์†”์ฐฝ์ด ๋จนํ†ต์ด ๋œ ๊ฒƒ์ด๋‹ค.

๋Š๋‚€์ 

์˜ค๋Š˜ ๋งŒ๋‚œ ํŽ˜์–ด๋ถ„๊ป˜ ๋งŽ์€ ๊ฒƒ์„ ๋ฐฐ์› ๋‹ค. react ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„(์ž์‹์ปดํฌ๋„ŒํŠธ, ๋ถ€๋ชจ์ปดํฌ๋„ŒํŠธ์˜ ๊ด€๊ณ„)์„ ๊ทธ๋ฆผ์œผ๋กœ ๊ทธ๋ฆฌ๋ฉด ์ข‹๋‹ค๋Š” ์ . ๋ฆฌ์•กํŠธ ํŒŒ์ผ์ด ์–ด๋–คํ˜•์‹์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋Š”์ง€ ๋ฏธ๋ฆฌ ๊ผผ๊ผผํ•˜๊ฒŒ ์‚ดํŽด๋ณธ ๋’ค์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ. ํ•ญ์ƒ ๋‚จ์—๊ฒŒ ์„ค๋ช…ํ•ด์ค€๋‹ค๊ณ  ์ƒ๊ฐ์„ ํ•˜๊ณ  ๊ณต๋ถ€ํ•ด์•ผํ•œ๋‹ค๋Š” ์ .
๊ทธ๋ฆฌ๊ณ  ์ผ์ฐ์ข€ ์ž์•ผ๊ฒ ๋‹ค. ์š”์ฆ˜ ๋Šฆ๊ฒŒ์ž์„œ๊ทธ๋Ÿฐ์ง€ ๋งค์ผ 9์‹œ๋งˆ๋‹ค ์ •์‹ ์„ ๋ชป์ฐจ๋ฆฐ๋‹ค ใ…œใ…œ

profile
DONE is better than PERFECT

0๊ฐœ์˜ ๋Œ“๊ธ€