useTitle 是 VueUse 库的工具函数!
🎯 核心功能
useTitle 用于响应式地修改浏览器页面标题。
💡 基本用法
import { useTitle } from '@vueuse/core'
// 创建响应式标题
const title = useTitle()
// 修改标题
title.value = '新的页面标题'
// 浏览器 标签页 标题 会自动更新
📊 主要特性
| 特性 | 说明 |
|---|---|
| 响应式 | 标题变化自动更新页面 |
| 双向绑定 | 可以读取当前标题 |
| SSR 支持 | 支持服务器端渲染 |
| Observable | 可观察标题变化 |
| TypeScript | 完整类型支持 |
💡 高级用法
1. 带默认值
// 设置初始标题
const title = useTitle('SofTool.CN - 物联网平台')
// 之后可以修改
title.value = '设备管理 - SofTool.CN'
2. 带模板的标题
// 使用模板字符串
const deviceName = ref('温度传感器')
const pageTitle = useTitle()
// 自动响应 deviceName 变化
watchEffect(() => {
pageTitle.value = `${deviceName.value} - 设备详情 - SofTool.CN`
})
3. 恢复原始标题
const title = useTitle()
const originalTitle = document.title
// 修改标题
title.value = '新标题'
// 恢复原始标题
title.value = originalTitle
// 或
document.title = originalTitle
🔄 与传统方式的对比
传统方式
// 直接操作 document.title
document.title = '新标题'
// 问题:
// 1. 不是响应式的
// 2. 没有类型提示
// 3. 需要手动管理
VueUse 方式
// 使用 useTitle
import { useTitle } from '@vueuse/core'
const title = useTitle('默认标题')
title.value = '新标题' // 响应式更新
// 优点:
// 1. 响应式
// 2. 类型安全
// 3. 组合式 API
// 4. 自动清理
📈 SEO 优化
1. 关键词优化
// 根据页面内容动态设置SEO标题
const seoTitle = computed(() => {
const keywords = {
dashboard: '物联网仪表板,设备监控,数据分析',
devices: '设备管理,物联网设备,传感器管理',
alarms: '告警管理,实时告警,故障监控'
}
const routeName = route.name as string
const keyword = keywords[routeName] || '物联网平台'
return `SofTool.CN - ${route.meta.title} | ${keyword}`
})
const pageTitle = useTitle(seoTitle)
2. 多语言标题
// 支持多语言标题
const { t } = useI18n()
const route = useRoute()
const pageTitle = useTitle()
// 根据语言和路由设置标题
watch([() => route.name, () => locale.value], () => {
const title = t(`pageTitles.${route.name}`)
pageTitle.value = `${title} - SofTool.CN`
})
🎯 TypeScript 支持
// 完整类型支持
import { useTitle } from '@vueuse/core'
// 类型推断
const title = useTitle<string>('初始标题')
title.value = '新标题' // ✅
title.value = 123 // ❌ 应该是 string
💡 注意事项
1. SSR 兼容性
// 在服务器端渲染中安全使用
import { useTitle } from '@vueuse/core'
// SSR 环境下会自动处理
const title = useTitle('默认标题')
2. 内存管理
// useTitle 会自动清理
// 组件卸载时,不会泄漏内存
3. 性能考虑
// 避免频繁更新
// 防抖处理
import { useTitle, useDebounceFn } from '@vueuse/core'
const title = useTitle()
const updateTitle = useDebounceFn((newTitle) => {
title.value = newTitle
}, 300)
// 防抖更新
updateTitle('新标题')
📋 总结
useTitle 是 VueUse 库提供的工具,不是 Vue 3 核心 API:
- ✅ 来源:VueUse 工具库
- ✅ 功能:响应式修改页面标题
- ✅ 优势:类型安全、响应式、SSR 支持
- ✅ 场景:动态标题、SEO 优化、多语言
- ✅ 性能:自动清理、性能优化
