๐ ๋คํฌ๋ชจ๋์์ ์๋ก๊ณ ์นจ ์ ๋ผ์ดํธ๋ชจ๋๊ฐ ์ ๊น ๋ณด์ด๋ ๋ฌธ์ - boostcampwm-2024/web17-juchumjuchum GitHub Wiki
๋ถ์ผ | ์์ฑ์ | ์์ฑ์ผ |
---|---|---|
FE | ์กฐ๋ฐฐ๊ฒฝ | 24๋ 12์ 03์ผ |
๋คํฌ๋ชจ๋์ผ ๋, ์๋ก๊ณ ์นจ์ ํ๋ฉด ๋ผ์ดํธ๋ชจ๋๊ฐ ์ ๊น ๋ณด์๋ค๊ฐ ๋คํฌ๋ชจ๋๋ก ์ธํ ๋๋ค.
์์ธ์ด ๋ญ๊น?
context๋ฅผ ํตํด์, ํ ๋ง๋ฅผ ์ฌ์ฉํด์ผํ๋ ์ปดํฌ๋ํธ์ ๋ฟ๋ ค์ฃผ๊ณ ์๋ค. (์ฌ์ด๋๋ฐ, ๊ทธ๋ํ)
// themeProvider.tsx
useEffect(() => {
document.body.classList.toggle('dark', theme === 'dark');
}, [theme]);
- theme์ด๋ผ๋ ํ ๋ง ์ํ๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค, theme์ด dark์ผ ๋ body์ dark ํด๋์ค๋ฅผ ๋ฃ์ด์ฃผ์ด ํ๋ฉด์ ์ ๋ฐ์ดํธํ๋ค.
๋น์ฐํ theme์ด๋ผ๋ ์ํ๋ฅผ ๊ฐ์งํด์ผํ๋ useEffect๊ฐ ์ ํฉํ๋ค๊ณ ์๊ฐํ๋ค.
useEffect๋ฅผ ์ ๊ฑฐํ๊ณ document.body.classList.toggle('dark', theme === 'dark');
๋ง ์์ฑํ๋ค๋ฉด, ๊น๋นก์ ํ์์ด ์์ด์ง๋ค.
useEffect๋ก ๊ฐ์ธ๋ ๊ฒ๊ณผ ๊ทธ๋ ์ง ์์ ๊ฒ์ด ๋ฌด์จ ์ฐจ์ด๊ฐ ์๋๊ฑธ๊น?
-
useEffect๋ก ๊ฐ์ธ๋ ๊ฒฝ์ฐ
React DOM์ด ์ ๋ฐ์ดํธ๊ฐ ์๋ฃ๋ ํ์ useEffect๊ฐ ์คํ๋๋ฏ๋ก, ์ ๊น ์ง์ฐ์ด ๋ฐ์ํ ์ ์๋ค.
์ค์ ๋ก ๋๋ฒ๊น ์ ํด๋ณด๋ฉด, useEffect๊ฐ ์ต์ด ์คํ๋์ ๋ ๋ผ์ดํธ๋ชจ๋์ด๊ณ ๋ด๋ถ ๋ก์ง์ด ์คํ๋์ด์ผ๋ง ๋คํฌ๋ชจ๋๊ฐ ์ ์ฉ๋๋ค.
์ด ์ฐฐ๋์ ์๊ฐ์ด ์ฐ๋ฆฌ์๊ฒ ๊น๋นก์์ผ๋ก ๋ณด์ด๋ ๊ฒ์ด๋ค.
๊ฐ๋ฐ์๋๊ตฌ๋ฅผ ๋ณด๋ฉด useEffect ๋ด๋ถ์ ์์ ๋ ์ผ๋จ ๋ผ์ดํธ๋ชจ๋์ด๊ณ , document.bodyโฆ ๊ฐ ์คํ๋์ด์ผ ๋คํฌ๋ชจ๋๊ฐ ์ ์ฉ๋๋ค.
-
useEffect๋ก ๊ฐ์ธ์ง ์๋ ๊ฒฝ์ฐ
useEffect๋ก ๊ฐ์ธ์ง ์๋๋ค๋ฉด ๋ฆฌ์กํธ์ ๋ ๋๋ง ์ฌ์ดํด์ ์ผ๋ถ๋ก ์ทจ๊ธ๋์ด, ํ ๋ง ๋ณ๊ฒฝ์ด ๋ ๋๋ง ๊ณผ์ ์์ ๋ฐ๋ก ์คํ๋๋ค.
๋ํ
document.body.classList.toggle('dark', theme === 'dark');
์ฌ๊ธฐ์์ theme์ useState๋ก ๊ด๋ฆฌ๋๊ณ ์๊ธฐ ๋๋ฌธ์, ์ํ๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ํด๋น provider๊ฐ ๋ฆฌ๋ ๋๋ง ๋์ด ํ ๋ง ๋ณ๊ฒฝ์ด ์ผ์ด๋๋ค.