[251224] TIL

Today I Learned (2025-12-24)

๋ฆฌ์•กํŠธ์—์„œ ๋ณ€์ˆ˜ ๊ด€๋ฆฌ ์‹œ, useRef์™€ let ์‚ฌ์šฉ ์ฐจ์ด์ 

๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์€ ๋ฆฌ๋ Œ๋”๋ง ์‹œ ๋™์ž‘ ๋ฐฉ์‹์ž„

let

  • ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง ๋  ๋•Œ๋งˆ๋‹ค ์ดˆ๊ธฐํ™” ๋˜์–ด์„œ ์ด์ „ ๊ฐ’์„ ์žƒ์–ด๋ฒ„๋ฆผ

useRef

  • ๋ฆฌ๋ Œ๋”๋ง ๋˜์–ด๋„ ๊ฐ’์€ ์œ ์ง€๋จ
  • ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋”๋ผ๋„ ๋ฆฌ๋ Œ๋”๋ง์ด ์œ ๋ฐœ๋˜์ง€ ์•Š์Œ

์‹ค์ œ ์‚ฌ์šฉ ์‚ฌ๋ก€

useRef

  • DOM ์š”์†Œ์— ์ ‘๊ทผํ•  ๋•Œ ์‚ฌ์šฉ
  • setTimeout, setInterval ์˜ ID ์ €์žฅํ•  ๋•Œ๋„ ์œ ์šฉ
useEffect(() => {
  const intervalId = window.setInterval(() => {
    console.log("tick");
  }, 1000);

  return () => {
    clearInterval(intervalId);
  };
}, []);
  • ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์กฐ๊ฑด๋ถ€๋กœ ์‹œ์ž‘/์ค‘์ง€ํ•˜๊ฑฐ๋‚˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์—์„œ clear ํ•ด์•ผ ํ•  ๋•Œ ํ•œ๊ณ„๊ฐ€ ์žˆ์Œ
"use client";

import { useEffect, useRef } from "react";

export function TimerExample() {
  const intervalRef = (useRef < number) | (null > null);

  useEffect(() => {
    intervalRef.current = window.setInterval(() => {
      console.log("tick");
    }, 1000);

    return () => {
      if (intervalRef.current !== null) {
        clearInterval(intervalRef.current);
        intervalRef.current = null;
      }
    };
  }, []);

  return <div>์ฝ˜์†”์„ ํ™•์ธํ•˜์„ธ์š”</div>;
}
  • ์œ„ ์ฒ˜๋Ÿผํ•˜๋ฉด ๋ฆฌ๋ Œ๋”๋ง๋˜์–ด๋„ ์œ ์ง€, cleanup ์‹œ ์ •ํ™•ํ•œ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • state ์ฒ˜๋Ÿผ ๋ฆฌ๋ Œ๋”๋ง์„ ์œ ๋ฐœํ•˜์ง€ ์•Š์Œ

์ปดํฌ๋„ŒํŠธ ์™ธ๋ถ€์—์„œ let ์„ ์–ธํ•˜๋ฉด ๋ฆฌ๋ Œ๋”๋ง ์˜ํ–ฅ์„ ์•ˆ ๋ฐ›์ง€ ์•Š๋‚˜?

  1. ์ปดํฌ๋„ŒํŠธ ์™ธ๋ถ€์˜ ๋ณ€์ˆ˜๋Š” ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ ์ธ์Šคํ„ด์Šค๊ฐ€ ๊ณต์œ ํ•˜๊ฒŒ ๋จ
    • ๊ฐ™์€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์‚ฌ์šฉ ํ•  ๋•Œ ์˜ˆ๊ธฐ์น˜ ๋ชปํ•œ ๋™์ž‘์ด ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
let count = 0;

function Counter() {
  count++;
  return <div>{count}</div>;
}
<Timer />
<Timer />
  • ๊ฐ™์€ ์ปดํฌ๋„ŒํŠธ 2๊ฐœ๊ฐ€ ๊ฐ™์€ count ๋ฅผ ์‚ฌ์šฉํ•จ
  • useRef๋Š” ์ปดํฌ๋„ŒํŠธ ์ธ์Šคํ„ด์Šค๋งˆ๋‹ค ๋ณ„๋„ ์ €์žฅ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•จ, ๋ฆฌ์•กํŠธ๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ์ธ์Šคํ„ด์Šค๋ณ„๋กœ ๊ด€๋ฆฌํ•จ
  1. ์ „์—ญ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ์˜ ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ๋–จ์–ด์ง
  2. ๋ฆฌ์•กํŠธ ์›์น™ ์ค‘ ํ•˜๋‚˜์ธ ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„์— ์œ„๋ฐฐ๋จ
    • ์ƒํƒœ๊ด€๋ฆฌ๊ฐ€ ๋ฆฌ์•กํŠธ ์ƒ๋ช…์ฃผ๊ธฐ ๋ฐ–์—์„œ ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์ž„
    • ์ƒํƒœ ๊ด€๋ฆฌ ํ•  ๋•Œ๋Š” useState๋‚˜ useRef๋ฅผ ์“ฐ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

Categories:

Updated:

Leave a comment