Skip to content

状态管理类

函数用途跨组件共享SSR 安全可修改
useState运行时状态✅ 相同 key 共享
useAppConfig应用配置✅ 全局✅ 通过 updateAppConfig

useState

SSR 安全的跨组件共享状态。相同 key 的 useState 在所有组件中共享同一份状态。

ts
// 基本用法
const count = useState('counter', () => 0)

// 带类型
const user = useState<User | null>('user', () => null)

// 读取和修改
count.value++
console.log(count.value)

// 跨组件共享(相同 key 共享同一状态)
// 组件 A
const count = useState('counter', () => 0)
// 组件 B
const count = useState('counter', () => 0)  // 获取同一个状态

第二个参数是初始化函数

只在首次创建时调用。后续组件使用相同 key 时,直接返回已有状态。

INFO

不要用普通的 ref 替代 useState

  • ref:组件内状态,SSR 时数据不传递
  • useState:全局共享状态,SSR 时自动通过 Payload 传递

常见模式

ts
// 全局用户状态
const user = useState<User | null>('user', () => null)

// 全局购物车
const cart = useState<CartItem[]>('cart', () => [])

// 全局主题
const theme = useState<'light' | 'dark'>('theme', () => 'light')

useAppConfig

获取应用配置(app.config.ts 中定义)。

ts
const appConfig = useAppConfig()

console.log(appConfig.theme.primaryColor)
console.log(appConfig.layout.sidebarWidth)

配合 app/app.config.ts

ts
export default defineAppConfig({
  theme: {
    primaryColor: '#00DC82',
    darkMode: false,
  },
  layout: {
    sidebarWidth: 240,
  },
})

useState vs useAppConfig

特性useStateuseAppConfig
可修改✅ 直接赋值✅ 通过 updateAppConfig()
跨组件共享✅ 相同 key✅ 全局
定义位置组件中app.config.ts
构建时配置
环境变量覆盖❌(用 runtimeConfig
适用场景运行时状态主题/布局配置

选择原则

  • 运行时变化的业务数据 → useState
  • 主题、布局等配置 → useAppConfig
  • 环境变量 → useRuntimeConfig

基于 Nuxt 4 官方文档整理编写