본문 바로가기

WEB개발/REACT

unmount

컴포넌트가 DOM에서 제거되는 순간입니다.

 

 

언마운트가 일어나는 상황들

 

1. 조건부 렌더링 — 가장 흔한 경우

function App() {
  const [show, setShow] = useState(true);

  return (
    <div>
      {show && <MyComponent />}  {/* show가 false되면 언마운트 */}
      <button onClick={() => setShow(false)}>숨기기</button>
    </div>
  );
}

 

2. 라우터 페이지 이동

// React Router
// /home → /about 으로 이동하면
// Home 컴포넌트 언마운트, About 컴포넌트 마운트

<Routes>
  <Route path="/home" element={<Home />} />   {/* /home 벗어나면 언마운트 */}
  <Route path="/about" element={<About />} /> {/* /about 진입하면 마운트 */}
</Routes>

 

3. 리스트 아이템 제거

function List() {
  const [items, setItems] = useState([1, 2, 3]);

  const remove = (id) => setItems(items.filter(i => i !== id));

  return (
    <>
      {items.map(item => (
        <Item key={item} />  {/* 배열에서 제거되면 언마운트 */}
      ))}
    </>
  );
}

 

4. 탭 전환

function Tabs() {
  const [tab, setTab] = useState('A');

  return (
    <>
      {tab === 'A' && <TabA />}  {/* B탭 클릭 시 TabA 언마운트 */}
      {tab === 'B' && <TabB />}  {/* A탭 클릭 시 TabB 언마운트 */}
    </>
  );
}

 

5. key 변경 — 강제 언마운트

// key가 바뀌면 React는 같은 컴포넌트라도
// 언마운트 후 새로 마운트시킴
<MyComponent key={userId} />
// userId가 바뀌면 → 언마운트 → 새로 마운트

 

 

훅별 언마운트 동작

1.`useState`  상태 소멸

2. `useEffect` cleanup 함수 실행

3. `useRef` 참조 소멸

4. `useCallback` / `useMemo` 캐시 소멸

 

주의사항
컴포넌트는 사라졌지만 외부에 등록된 것들은 자동 정리 안됨
useEffect(() => {
  // ❌ 언마운트 후에도 계속 실행됨 — 메모리 누수!
  window.addEventListener('resize', handleResize);
  setInterval(callback, 1000);
  fetchData().then(res => setData(res)); // 언마운트 후 setState 시도

  // ✅ 반드시 cleanup으로 직접 정리해야 함
  return () => {
    window.removeEventListener('resize', handleResize);
    clearInterval(timerId);
  };
}, []);​

 

'WEB개발 > REACT' 카테고리의 다른 글

[기본 event] elements 드래그  (1) 2026.05.07
vite-plugin-route-meta  (0) 2026.01.15
pull to refresh  (0) 2026.01.12
react router (navigate)  (0) 2025.12.17
[hook] useCallback  (0) 2025.12.16