ReactJS 훅 패턴 ~useEffectEvent 패턴~

발행: (2026년 1월 19일 오후 03:59 GMT+9)
2 분 소요
원문: 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는 어떻게 작동하나요?

Component는 기본 React 앱이 컴포넌트들로 구성된다는 것을 의미합니다. 컴포넌트는 UI를 반환하는 JavaScript 함수일 뿐입니다. javascript function App { return Hello ; } JS...

React 앱의 기본

소개 오늘은 React 앱을 생성할 때 보이는 파일과 폴더의 이유와 사용 방법을 살펴보겠습니다. !React app structurehttps:/...

React 코딩 챌린지 : TypeHead

Zeeshan Ali !ZeeshanAli-0704https://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws...