본문으로 건너뛰기

useDocumentTab

브라우저 탭의 제목(title)파비콘(favicon) 을 동적으로 변경하고, 컴포넌트 언마운트 시 원래 상태로 복구해주는 커스텀 React 훅입니다.

  • 페이지 별로 다른 제목과 파비콘을 손쉽게 적용할 수 있습니다.
  • 라우팅 시 탭 제목과 아이콘을 함께 바꿔주어 UX를 개선할 수 있습니다.
  • cleanup 시 원래 값으로 되돌려주므로, 다른 컴포넌트와 충돌하지 않습니다.

🔗 사용법

useDocumentTab(options);

매개변수

이름타입설명
optionsobject설정 옵션 (title, favicon)
titlestring브라우저 탭에 표시할 제목
faviconstring브라우저 탭에 표시할 파비콘 이미지 URL (내부 경로 또는 외부 링크 가능)

반환값

없음 (void)

이 훅은 단순히 전역 document 상태를 조작하기 때문에 반환값을 제공하지 않습니다.


✅ 예시

기본 예시

import { useDocumentTab } from 'hookdle';

function HomePage() {
useDocumentTab({
title: '홈 | MyApp',
favicon: 'https://cdn-icons-png.flaticon.com/512/25/25694.png',
});

return <h1></h1>;
}

라우트별로 다르게 적용하기 (React Router)

import { BrowserRouter, Routes, Route, Link } from 'react-router';
import { useDocumentTab } from 'hookdle';

function Home() {
useDocumentTab({ title: '홈 | MyApp', favicon: 'https://cdn-icons-png.flaticon.com/512/25/25694.png' });
return <h1></h1>;
}

function About() {
useDocumentTab({ title: '소개 | MyApp', favicon: 'https://cdn-icons-png.flaticon.com/512/1077/1077114.png' });
return <h1>소개</h1>;
}

function Contact() {
useDocumentTab({ title: '연락처 | MyApp', favicon: 'https://cdn-icons-png.flaticon.com/512/561/561127.png' });
return <h1>연락처</h1>;
}

export default function App() {
return (
<BrowserRouter>
<nav>
<Link to="/"></Link> | <Link to="/about">소개</Link> | <Link to="/contact">연락처</Link>
</nav>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
<Route path="/contact" element={<Contact />} />
</Routes>
</BrowserRouter>
);
}

💡 만약 이 훅이 없다면?

직접 document.title<link rel="icon">을 제어해야 합니다.

useEffect(() => {
const prevTitle = document.title;
document.title = '홈 | MyApp';

let link = document.querySelector<HTMLLinkElement>('link[rel*="icon"]');
const prevFavicon = link?.href;
if (!link) {
link = document.createElement('link');
link.rel = 'icon';
document.head.appendChild(link);
}
link.href = 'https://cdn-icons-png.flaticon.com/512/25/25694.png';

return () => {
document.title = prevTitle;
if (prevFavicon && link) link.href = prevFavicon;
};
}, []);

이처럼 직접 구현하면 초기값 저장/복구, favicon 태그 생성, cleanup 관리까지 모두 수동으로 처리해야 합니다.

useDocumentTab을 사용하면 이 과정을 간단하게 추상화할 수 있습니다.