header-img
Info :
728x90

UseEffect Hook

useEffect ๋Š”
๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง ๋  ๋•Œ๋งˆ๋‹ค ํŠน์ • ์ž‘์—…์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” Hook ์œผ๋กœ
ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์˜ ๋งˆ์šดํŠธ ๋‹จ๊ณ„์ธ componentDidMount + ์—…๋ฐ์ดํŠธ ๋‹จ๊ณ„์ธ componentDidUpdate + ์–ธ๋งˆ์šดํŠธ ๋‹จ๊ณ„์ธ componentWillUnmount ์˜ ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•˜๋Š” ํ›…์ด๋‹ค.

componentDidMount+componentDidUpdate์— ํ•ด๋‹นํ•˜๋Š” ์ฝ”๋“œ๋“ค์€ useEffect์— ์ „๋‹ฌ๋˜๋Š” ํ•จ์ˆ˜ ๋‚ด์— ์ž‘์„ฑํ•˜๋ฉด ๋˜๋ฉฐ, componentWillUnmount์— ํ•ด๋‹นํ•˜๋Š” ์ฝ”๋“œ๋“ค์€ ํ•จ์ˆ˜ ํ˜•ํƒœ๋กœ returnํ•˜๊ฒŒ๋” ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.

๊ธ€์“ด์ด๊ฐ€ ์ž‘์„ฑํ•œ UseEffect์— ๊ด€ํ•œ ๊ธ€(1)

์—ฌ๊ธฐ์— ๋” ๊ฐ„๋‹จํ•œ ์„ค๋ช…์ด ์กฐ๊ธˆ ์ถ”๊ฐ€๋˜์–ด ์žˆ๊ธด ํ•˜๋‹ค.

์•„๋ฌดํŠผ ์ด๋ ‡๊ฒŒ ์–ด๋–ค ํŠน์ • ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฐ”๋€Œ๋Š” ๊ฒฝ์šฐ ๋‹ค์‹œ ๊ทธ๋ฆผ์„ ๊ทธ๋ ค์ฃผ๊ณ  ์‹ถ์„ ๋•Œ useeffect๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ƒ๊ฐ๋ณด๋‹ค ์—„์ฒญ ์ž˜ ์“ฐ๊ฒŒ ๋˜๋Š” ๊ฒƒ์„ ๋ณด๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

๋ฌธ์ œ

ํ•˜์ง€๋งŒ useEffect๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ DOM์„ ์กฐ์ž‘ํ•˜๋‹ค ๋ณด๋ฉด ํ™”๋ฉด์ด ๊นœ๋นก๊ฑฐ๋ฆฌ๋Š” ํ˜„์ƒ(flicker)์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋Œ€์ถฉ ์ด๋ ‡๊ฒŒ ๊นœ๋นก ๊นœ๋นก ... ๊ฑฐ๋ฆฌ๊ฒŒ ๋˜๋Š”๋ฐ ์ˆซ์ž๋‚˜ ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒฝ์šฐ์—๋Š” ํฌ๊ฒŒ ๊ฑฐ์Šฌ๋ฆฌ์ง€ ์•Š๊ฒ ์ง€๋งŒ ํ™”๋ฉด ๋ฒ„ํŠผ์˜ ๋‚ด์šฉ์„ ๊ทธ๋ฆฌ๋Š” ํ–‰์œ„ ๋“ฑ์„ ํ•˜๊ฒŒ ๋˜๋ฉด
์‚ฌ์šฉ์ž์˜ ์ž…์žฅ์—์„œ๋Š” ์ด์Šˆ ์‚ฌํ•ญ์ด๋ผ๊ณ  ์—ฌ๊ธธ ์ˆ˜๋„ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

๋ฌธ์ œ ์ด์œ 

์œ„์™€ ๊ฐ™์€ ๋ฌธ์ œ๋Š” useeffect์˜ ๋™์ž‘ ํ˜•ํƒœ๋ฅผ ์•Œ์•„๋ณด๋ฉด ์† ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

useEffect ๋Š” ์ปดํฌ๋„ŒํŠธ๋“ค์ด render์™€ paint ๋œ ํ›„ ์‹คํ–‰๋˜๊ฒŒ ๋˜๊ณ , ๋น„๋™๊ธฐ์ (asynchronous)์œผ๋กœ ์‹คํ–‰๋˜๊ฒŒ ๋œ๋‹ค.
ํ™”๋ฉด์— paint ๋œ ํ›„ ์‹คํ–‰์ด ๋œ ๋‹ค์Œ ๋™์ž‘์ด ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์—, useEffect ๋‚ด๋ถ€์— DOM์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ, ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ๋Š” ํ™”๋ฉด์˜ ๊นœ๋นก์ž„์„ ๋ณด๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

UseLayoutEffect

useLayoutEffect ๋„ ์œ„์˜ useEffect์™€ ์•„์ฃผ ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์„ ํ•˜๋Š”๋ฐ,
์ปดํฌ๋„ŒํŠธ๋“ค์ด render ๋œ ํ›„ ์‹คํ–‰๋˜๋ฉฐ, ๊ทธ ์ดํ›„์— paint ๊ฐ€ ์ผ์–ด๋‚˜๊ฒŒ ๋œ๋‹ค.
์ด ์ž‘์—…์€ ๋™๊ธฐ์ (synchronous)์œผ๋กœ ์‹คํ–‰๋˜๋ฉฐ, Paint๊ฐ€ ๋˜๊ธฐ ์ „์— ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— DOM์„ ์กฐ์ž‘ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์กด์žฌํ•˜๋”๋ผ๋„ ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ๋Š” ๊นœ๋นก์ž„์„ ๋Š๋ผ์ง€ ๋ชปํ•˜๊ฒŒ ๋œ๋‹ค.

UseEffect vs UseLayoutEffect

๋‘ ํ›…์€ ์‹คํ–‰ ์‹œ์  ์—์„œ ์ฐจ์ด๊ฐ€ ๋‚˜๊ฒŒ ๋œ๋‹ค.
๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ƒํ™ฉ์— ๋งž๊ฒŒ ๋‘ ์ฝ”๋“œ๋ฅผ ๊ตฌ๋ถ„ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•œ๋ฐ..

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

DOM์„ ๋‹ค์‹œ ๊ทธ๋ ค์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๋‚˜ ๊ณ„์‚ฐ๋œ state ๊ฐ’์„ ํ™”๋ฉด์— ํ‘œ์ถœํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” useLayoutEffect ๊ฐ€ ์œ ๋ฆฌํ•˜๊ณ ..

๊ทธ ์™ธ์— ๋ฐ์ดํ„ฐ fetch ํ•จ์ˆ˜ ์‹คํ–‰, ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ, state๋ฅผ ๋‹ค๋ฃจ๋Š” ์ž‘์—… ๋“ฑ ๋ชจ๋“  ๊ฒฝ์šฐ์—๋Š” useEffect๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ์œ ๋ฆฌํ•ด๋ณด์ธ๋‹ค.

๊ฒฐ๋ก 

์™ ๋งŒํ•œ ์ƒํ™ฉ์—์„œ๋Š” useEffect ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์ข‹๊ณ , ํ™”๋ฉด ๊นœ๋นก์ž„์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ ๊ฐ™์€ ๋ถ€๋ถ„(ui์˜ ๋ณ€๊ฒฝ์„ ๋ถˆ๋Ÿฌ์™€์•ผํ•˜๋Š”๋ฐ.. ๊ฑฐ์Šฌ๋ฆด ๊ฒฝ์šฐ)์—์„œ๋งŒ useLayoutEffect ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜์ž.

728x90
๋”๋ณด๊ธฐ
FRONTEND/React