ReactJS 훅 패턴 ~useEffectEvent 패턴~

발행: (2026년 1월 19일 오후 03:59 GMT+9)
2 min read
원문: Dev.to

Source: Dev.to

개요

useEffectEventReact 19에서 도입되었습니다. 이 훅을 사용하면 효과 안에서 최신 props나 state 값을 접근할 수 있지만, 그 때문에 효과가 다시 실행되지는 않습니다.
React에서 흔히 겪는 문제는 의존성 배열에 값을 넣어두면 불필요한 재렌더링이 발생한다는 점입니다. useEffectEvent는 이러한 값을 의존성에서 분리하고 콜백의 인자로 제공함으로써 문제를 해결합니다.

예시

import { useState, useEffect, useEffectEvent } from "react";

function trackPage(url, itemCount) {
  console.log(`Url: ${url} | Items in cart: ${itemCount}`);
}

function Page({ url }) {
  const [itemCount, setItemCount] = useState(0);

  // useEffectEvent는 `itemCount`를 최신 상태로 접근하게 해 주지만
  // 효과 의존성 배열에 넣을 필요는 없습니다.
  const onVisit = useEffectEvent(() => trackPage(url, itemCount));

  useEffect(() => {
    onVisit();
  }, [url]); // `itemCount`는 의존성 배열에서 제외되었습니다.

  return (
    <div>
      <h2>Current Page: {url}</h2>
      <p>Items in cart: {itemCount}</p>
      <button onClick={() => setItemCount(itemCount + 1)}>
        Add Item to Cart
      </button>
      <button
        onClick={() => setItemCount(0)}
        disabled={itemCount === 0}
      >
        Clear Cart
      </button>
    </div>
  );
}

function App() {
  const [url, setUrl] = useState("/home");

  return (
    <div>
      <button onClick={() => setUrl("/home")}>Home</button>
      <button onClick={() => setUrl("/cart")}>Cart</button>
      <button onClick={() => setUrl("/about")}>About</button>
      <Page url={url} />
    </div>
  );
}

export default App;
Back to Blog

관련 글

더 보기 »

🚨 React 재렌더링 방법: 레퍼런스가 중요!

변형 메서드는 참조를 변경하지 않습니다. 이러한 메서드들은 메모리 내 동일한 배열/객체를 수정하므로 React 상태에 직접 사용하면 재렌더링이 트리거되지 않을 수 있습니다.