Skip to content

๐ŸŒš ๋‹คํฌ๋ชจ๋“œ์—์„œ ์ƒˆ๋กœ๊ณ ์นจ ์‹œ ๋ผ์ดํŠธ๋ชจ๋“œ๊ฐ€ ์ž ๊น ๋ณด์ด๋Š” ๋ฌธ์ œ

baegyeong edited this page Dec 3, 2024 · 2 revisions
๋ถ„์•ผ ์ž‘์„ฑ์ž ์ž‘์„ฑ์ผ
FE ์กฐ๋ฐฐ๊ฒฝ 24๋…„ 12์›” 03์ผ

๋‹คํฌ๋ชจ๋“œ ์ƒํƒœ์—์„œ ์ƒˆ๋กœ๊ณ ์นจ ์‹œ ๋ผ์ดํŠธ๋ชจ๋“œ๊ฐ€ ์ž ๊น ๊นœ๋นกํ•œ๋‹ค.

๋‹คํฌ๋ชจ๋“œ์ผ ๋•Œ, ์ƒˆ๋กœ๊ณ ์นจ์„ ํ•˜๋ฉด ๋ผ์ดํŠธ๋ชจ๋“œ๊ฐ€ ์ž ๊น ๋ณด์˜€๋‹ค๊ฐ€ ๋‹คํฌ๋ชจ๋“œ๋กœ ์„ธํŒ…๋œ๋‹ค.

lightmode

์›์ธ์ด ๋ญ˜๊นŒ?


์–ด๋–ป๊ฒŒ ํ…Œ๋งˆ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์žˆ๋‚˜?

context๋ฅผ ํ†ตํ•ด์„œ, ํ…Œ๋งˆ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์— ๋ฟŒ๋ ค์ฃผ๊ณ  ์žˆ๋‹ค. (์‚ฌ์ด๋“œ๋ฐ”, ๊ทธ๋ž˜ํ”„)

// themeProvider.tsx
useEffect(() => {
  document.body.classList.toggle('dark', theme === 'dark');
}, [theme]);
  • theme์ด๋ผ๋Š” ํ…Œ๋งˆ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค, theme์ด dark์ผ ๋•Œ body์— dark ํด๋ž˜์Šค๋ฅผ ๋„ฃ์–ด์ฃผ์–ด ํ™”๋ฉด์„ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.

๋‹น์—ฐํžˆ theme์ด๋ผ๋Š” ์ƒํƒœ๋ฅผ ๊ฐ์ง€ํ•ด์•ผํ•˜๋‹ˆ useEffect๊ฐ€ ์ ํ•ฉํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.


useEffect๋ฅผ ์ œ๊ฑฐํ•ด๋ณด๋ฉด ์–ด๋–จ๊นŒ?

useEffect๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  document.body.classList.toggle('dark', theme === 'dark');๋งŒ ์ž‘์„ฑํ•œ๋‹ค๋ฉด, ๊นœ๋นก์ž„ ํ˜„์ƒ์ด ์—†์–ด์ง„๋‹ค.

useEffect๋กœ ๊ฐ์‹ธ๋Š” ๊ฒƒ๊ณผ ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒƒ์ด ๋ฌด์Šจ ์ฐจ์ด๊ฐ€ ์žˆ๋Š”๊ฑธ๊นŒ?


  1. useEffect๋กœ ๊ฐ์‹ธ๋Š” ๊ฒฝ์šฐ

    React DOM์ด ์—…๋ฐ์ดํŠธ๊ฐ€ ์™„๋ฃŒ๋œ ํ›„์— useEffect๊ฐ€ ์‹คํ–‰๋˜๋ฏ€๋กœ, ์ž ๊น ์ง€์—ฐ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

    ์‹ค์ œ๋กœ ๋””๋ฒ„๊น…์„ ํ•ด๋ณด๋ฉด, useEffect๊ฐ€ ์ตœ์ดˆ ์‹คํ–‰๋์„ ๋• ๋ผ์ดํŠธ๋ชจ๋“œ์ด๊ณ  ๋‚ด๋ถ€ ๋กœ์ง์ด ์‹คํ–‰๋˜์–ด์•ผ๋งŒ ๋‹คํฌ๋ชจ๋“œ๊ฐ€ ์ ์šฉ๋œ๋‹ค.

    ์ด ์ฐฐ๋‚˜์˜ ์ˆœ๊ฐ„์ด ์šฐ๋ฆฌ์—๊ฒŒ ๊นœ๋นก์ž„์œผ๋กœ ๋ณด์ด๋Š” ๊ฒƒ์ด๋‹ค.

    useEffect

    ๊ฐœ๋ฐœ์ž๋„๊ตฌ๋ฅผ ๋ณด๋ฉด useEffect ๋‚ด๋ถ€์— ์žˆ์„ ๋•Œ ์ผ๋‹จ ๋ผ์ดํŠธ๋ชจ๋“œ์ด๊ณ , document.bodyโ€ฆ ๊ฐ€ ์‹คํ–‰๋˜์–ด์•ผ ๋‹คํฌ๋ชจ๋“œ๊ฐ€ ์ ์šฉ๋œ๋‹ค.

  2. useEffect๋กœ ๊ฐ์‹ธ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ

    useEffect๋กœ ๊ฐ์‹ธ์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋ฆฌ์•กํŠธ์˜ ๋ Œ๋”๋ง ์‚ฌ์ดํด์˜ ์ผ๋ถ€๋กœ ์ทจ๊ธ‰๋˜์–ด, ํ…Œ๋งˆ ๋ณ€๊ฒฝ์ด ๋ Œ๋”๋ง ๊ณผ์ •์—์„œ ๋ฐ”๋กœ ์‹คํ–‰๋œ๋‹ค.

    ๋˜ํ•œ document.body.classList.toggle('dark', theme === 'dark'); ์—ฌ๊ธฐ์„œ์˜ theme์€ useState๋กœ ๊ด€๋ฆฌ๋˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ํ•ด๋‹น provider๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง ๋˜์–ด ํ…Œ๋งˆ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚œ๋‹ค.

๐Ÿœ ํŒ€ ๊ฐœ๋ฏธ

๐Ÿ›๏ธ ํŒ€ ๋ฌธํ™”

๊ฐœ๋ฐœ ์œ„ํ‚ค

FE

BE

Infra

๐Ÿ—ฃ๏ธ ๋ฐœํ‘œ

๐Ÿ“š ํšŒ์˜๋ก

๐Ÿ”ด ์ธํ„ฐ๋ฏธ์…˜
๐ŸŸ  1์ฃผ์ฐจ
๐ŸŸก 2์ฃผ์ฐจ
๐ŸŸข 3์ฃผ์ฐจ
๐Ÿ”ต 4์ฃผ์ฐจ
๐ŸŸฃ 5์ฃผ์ฐจ
๐ŸŸค 6์ฃผ์ฐจ

๐Ÿ’ญ ํšŒ๊ณ 

๐Ÿง‘โ€๐Ÿคโ€๐Ÿง‘ ๋ฉ˜ํ† ๋ง

Clone this wiki locally