๐ก ์ธ๋ถ ์์คํ ๊ณผ ์ปดํฌ๋ํธ๋ฅผ ๋๊ธฐํ ํ ์ ์๊ฒ ํด์ฃผ๋ React Hook.
useEffect๋ ํจ์ํ ์ปดํฌ๋ํธ ์์ ์ฃผ๊ธฐ์์ ํ๋ฉด์ด ๋๋๋ง(Rendering)๋๊ณ ํ์ธํ (Painting)๋ ์ดํ์ ๋น๋๊ธฐ์ ์ผ๋ก ์คํ๋๋ค.
๋๋๋ง ์ดํ ์คํ๋๊ธฐ ๋๋ฌธ์ useEffect๋ด๋ถ์ DOM์ ์ํฅ์ ์ฃผ๋ ์ฝ๋๊ฐ ์์ ๊ฒฝ์ฐ ์ฌ์ฉ์ ์ ์ฅ์์ ๊น๋นก์์ ๊ฒฝํํ๊ฒ ๋๋ค.
๐ก ๋ธ๋ผ์ฐ์ ๊ฐ ํ๋ฉด์ ๋ค์ ๊ทธ๋ฆฌ๊ธฐ ์ ์ useEffect๋ฅผ ์คํํ๋ ๋ฒ์ ์ ๋๋ค.
useLayoutEffect๋ ์ปดํฌ๋ํธ๊ฐ ๋๋๋ง ๋ ์ดํ์ ์คํ๋๊ณ , useLayoutEffect๊ฐ ์คํ๋ ์ดํ์ ํ์ธํ ์ด ์ํ๋๋ค. useLayoutEffect๋ ๋๊ธฐ์ ์ผ๋ก ์คํ๋๋ค. ํ์ธํ ์ด์ ์ ์คํ๋๊ธฐ ๋๋ฌธ์ DOM ์กฐ์์ด ์๋๋ผ๋ ํ๋ฉด ๊น๋นก์์ด ๋ฐ์ํ์ง ์๋๋ค.
Render - DOM Tree๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด ๊ฐ ์๋ฆฌ๋ฒํธ์ ์คํ์ผ ์์ฑ์ ๊ณ์ฐ
Paint - ์ค์ ์คํฌ๋ฆฐ์ ๊ณ์ฐํ Layout์ ํ์ํ๊ณ ์ ๋ฐ์ดํธ ํ๋ ๊ณผ์
๐ก ๊ณต์๋ฌธ์์์๋ useLayoutEffect๋ฅผ ์ฌ์ฉํ๋ฉด ์ฑ๋ฅ์ ์ ํ๊ฐ ์์ ์ ์๋ค๊ณ ์ค๋ช ํ๋ค.
useLayoutEffect๋ ์์น๊ฐ ์ ํด์ง์ง ์๊ณ ์ํฉ์ ๋ฐ๋ผ ๋ฐ๋๋ ์ปดํฌ๋ํธ์ ๋ํด์ ์ฌ์ฉํ ์ ์๋ค.
์ต์๋จ ์ปดํฌ๋ํธ์ ํดํ | ๋๋จธ์ง ์ปดํฌ๋ํธ ํดํ |
---|---|
๋ ์ฌ์ง์ ๋ณด๋ฉด ํดํ์ ๋ฐฉํฅ์ด ์ปดํฌ๋ํธ(๋ฒํผ)์ ์์น์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค.
ํดํ์ ์์น๋ฅผ ๊ณ์ฐํ๋ ๊ณผ์ ์ด useEffect ๋ด์์ ์ฒ๋ฆฌ๋๊ฒ ๋๋ฉด, ํ์ธํ
์ด ๋๋ ์์ ์์ ํดํ์ ์์น๊ฐ ๊ณ์ฐ๋๊ณ ,
๊ทธ์ ๋ฐ๋ผ ์ปดํฌ๋ํธ์ ์์น๋ฅผ ๋ค์ ์กฐ์ ํด์ผํ๊ธฐ ๋๋ฌธ์ ์ฌ๋๋๋ง์ด ๋ฐ์ํ ์ ์๋ค.
์ด๋ useLayoutEffect๋ฅผ ์ฌ์ฉํ๋ฉด, useLayoutEffect์ ๋ด๋ถ ๋์(์๋ฅผ ๋ค์ด, ์ปดํฌ๋ํธ์ ์์น๋ฅผ ๊ณ์ฐ)์ ์ํํ ํ, React๊ฐ DOM์ ์ ๋ฐ์ดํธํ์ฌ ๋ธ๋ผ์ฐ์ ์ ํํํ๋ค.
์ต์๋จ ์ปดํฌ๋ํธ์ ํดํ | ๋๋จธ์ง ์ปดํฌ๋ํธ ํดํ |
---|---|
useEffect (์ถ์ฒ: React ๊ณต์๋ฌธ์) | useLayoutEffect (์ถ์ฒ: React ๊ณต์๋ฌธ์) |
๋ด๋ถ๋์์ ์ํํ ๋, useLayoutEffect๋ ๋๊ธฐ์ ์ผ๋ก ์คํ๋๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ์ํ ์
๋ฐ์ดํธ๊ฐ ๋๋๋ ๊ฒ์ ๋ณด์ฅํ๋ค.
๋ฐ๋ผ์ useLayoutEffect์ดํ ์คํ๋ painting์ ์ฐจ๋จํ๋ค.
useEffect์ ๋นํด ์ฑ๋ฅ์์ ์ด์๊ฐ ์๋ค๋ ์ ๋, ๋ด๋ถ ์ํ ์ ๋ฐ์ดํธ ๋ก์ง์ด ๋๊ธฐ์ ์ผ๋ก ์ํ๋๊ธฐ ๋๋ฌธ์ ํน๋ณํ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ์ฌ์ฉ์ ์ง์ํ๋ ๊ฒ ๊ฐ๋ค. useEffect์์ ์ฒ๋ฆฌํ๋ ์ํ ์ ๋ฐ์ดํธ ๋ก์ง์ด ํด์๋ก, useEffect์ ๋นํด ์ ํ๋ ์ฑ๋ฅ์ ๋ณด์ฌ์ฃผ๊ฒ ๋๋ค.
๋ค๋ฅธ ์ปดํฌ๋ํธ์ ์ํฅ์ ๋ฐ์ ๊ฒฐ์ ํ๊ณ ์ถ๊ฑฐ๋, ๋๋๋ง ์์ ์์ ์ปดํฌ๋ํธ์ ์์น๋ฅผ ํน์ ํ ์ ์๋ ๊ฒฝ์ฐ, ์ปดํฌ๋ํธ์ ์์น๋ฅผ ๊ณ์ฐํ๊ณ , ์ดํ์ ํ๋ฉด์ ์ ๋ฐ์ดํธ ํด์ฃผ์ด์ผ ํ๋ค.
useEffect๋ฅผ ์ฌ์ฉํ๋ฉด ์ปดํฌ๋ํธ๋ฅผ ์ค์ ๊ทธ๋ฆฌ๋ ๊ณผ์ (ํ์ธํ ) ์ดํ์ ๊ณ์ฐ ๋ก์ง์ด ์ํ๋๊ธฐ ๋๋ฌธ์ ์ด๊ธฐ ์์น์์ ์ค์ ๊ณ์ฐ๋ ์์น๊ฐ ๋ค๋ฅผ ๊ฒฝ์ฐ, ์ปดํฌ๋ํธ ์์ฒด๊ฐ ๊น๋นก์ด๋ ํ์์ด ๋ฐ์ํ ์ ์๋ค.
ํ์ง๋ง useLayoutEffect์ ๊ฒฝ์ฐ ํ์ธํ ๊ณผ์ ์ด์ ์ ๋๊ธฐ์ ์ผ๋ก ๊ณ์ฐ ๋ก์ง์ ์ํํ๊ธฐ ๋๋ฌธ์ ํ์ดํ ์์ ์์๋ ๊ณ์ฐ๋ ์์น๋ฅผ ์ฌ์ฉํ๊ฒ ๋์ด, ์์ฐ์ค๋ฝ๊ฒ ์ปดํฌ๋ํธ๊ฐ ํ๋ฉด์ ๊ทธ๋ฆด ์ ์๋ค.
useLayoutEffect๋ useEffect์ ๋ฌ๋ฆฌ ๋๊ธฐ์ ์ผ๋ก ์ํ ์ ๋ฐ์ดํธ๋ฅผ ์ํํ๊ธฐ ๋๋ฌธ์, useEffect ๋ด๋ถ ๋ก์ง์ด ๋ณต์กํ ์๋ก ์๋์ ์ผ๋ก ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์ด ์ฌ์ฉ์ ์ง์ํ๊ณ ์๋ค.
React ๊ณต์๋ฌธ์ : useEffect
React ๊ณต์๋ฌธ์ : useLayoutEffect
Medium ๋ธ๋ก๊ทธ : [React] useEffect ์ useLayoutEffect ์ ์ฐจ์ด๋ ๋ฌด์์ผ๊น?