usePageTitle.ts 856 B

123456789101112131415161718192021222324
  1. import { useEffect } from "react";
  2. import { updateFaviconWithBadge, updateFavicon, DEFAULT_FAVICON } from "@/utils/favicon";
  3. /**
  4. * 根据未读数更新页面标题和 favicon 红色数字徽章
  5. * @param unreadCount 未读消息数
  6. * @param baseTitle 基础标题(如 "AI-CS"),未读 > 0 时标题为 "(n) baseTitle"
  7. */
  8. export function usePageTitle(unreadCount: number, baseTitle: string) {
  9. useEffect(() => {
  10. const title = unreadCount > 0 ? `(${unreadCount}) ${baseTitle}` : baseTitle;
  11. document.title = title;
  12. if (unreadCount > 0) {
  13. // 延迟更新 favicon,保证首屏或切回标签时也能刷到
  14. const t = setTimeout(() => {
  15. updateFaviconWithBadge(unreadCount);
  16. }, 100);
  17. return () => clearTimeout(t);
  18. } else {
  19. updateFavicon(DEFAULT_FAVICON);
  20. }
  21. }, [unreadCount, baseTitle]);
  22. }