主题
useColorMode
具有自动数据持久性的反应式颜色模式(深色/浅色/自定义)。
¥Reactive color mode (dark / light / customs) with auto data persistence.
示例
← Click to change the color mode
基本用法
¥Basic Usage
js
import { useColorMode } from '@vueuse/core'
const mode = useColorMode() // Ref<'dark' | 'light'>
默认情况下,它将使用 usePreferredDark
又名 auto
模式)与用户的浏览器首选项进行匹配。读取 ref 时,默认情况下它将返回当前颜色模式(dark
、light
或你的自定义模式)。通过启用 emitAuto
选项,可以将 auto
模式包含在返回的模式中。当写入 ref 时,它将触发 DOM 更新并将颜色模式保留到本地存储(或你的自定义存储)。你可以通过 auto
设置回自动模式。
¥By default, it will match with users' browser preference using usePreferredDark
(a.k.a auto
mode). When reading the ref, it will by default return the current color mode (dark
, light
or your custom modes). The auto
mode can be included in the returned modes by enabling the emitAuto
option. When writing to the ref, it will trigger DOM updates and persist the color mode to local storage (or your custom storage). You can pass auto
to set back to auto mode.
ts
mode.value // 'dark' | 'light'
mode.value = 'dark' // change to dark mode and persist
mode.value = 'auto' // change to auto mode
配置
¥Config
js
import { useColorMode } from '@vueuse/core'
const mode = useColorMode({
attribute: 'theme',
modes: {
// custom colors
dim: 'dim',
cafe: 'cafe',
},
}) // Ref<'dark' | 'light' | 'dim' | 'cafe'>
高级用法
¥Advanced Usage
你还可以显式访问系统首选项和 storaged 用户覆盖模式。
¥You can also explicit access to the system preference and storaged user override mode.
js
import { useColorMode } from '@vueuse/core'
const { system, store } = useColorMode()
system.value // 'dark' | 'light'
store.value // 'dark' | 'light' | 'auto'
const myColorMode = computed(() => store.value === 'auto' ? system.value : store.value)
组件用法
¥Component Usage
vue
<template>
<UseColorMode v-slot="{ mode }">
<button @click="mode = mode === 'dark' ? 'light' : 'dark'">
Mode {{ mode }}
</button>
</UseColorMode>
</template>
类型声明
显示类型声明
typescript
export type BasicColorMode = "light" | "dark"
export type BasicColorSchema = BasicColorMode | "auto"
export interface UseColorModeOptions<T extends string = BasicColorMode>
extends UseStorageOptions<T | BasicColorMode> {
/**
* CSS Selector for the target element applying to
*
* @default 'html'
*/
selector?: string | MaybeElementRef
/**
* HTML attribute applying the target element
*
* @default 'class'
*/
attribute?: string
/**
* The initial color mode
*
* @default 'auto'
*/
initialValue?: MaybeRefOrGetter<T | BasicColorSchema>
/**
* Prefix when adding value to the attribute
*/
modes?: Partial<Record<T | BasicColorSchema, string>>
/**
* A custom handler for handle the updates.
* When specified, the default behavior will be overridden.
*
* @default undefined
*/
onChanged?: (
mode: T | BasicColorMode,
defaultHandler: (mode: T | BasicColorMode) => void,
) => void
/**
* Custom storage ref
*
* When provided, `useStorage` will be skipped
*/
storageRef?: Ref<T | BasicColorSchema>
/**
* Key to persist the data into localStorage/sessionStorage.
*
* Pass `null` to disable persistence
*
* @default 'vueuse-color-scheme'
*/
storageKey?: string | null
/**
* Storage object, can be localStorage or sessionStorage
*
* @default localStorage
*/
storage?: StorageLike
/**
* Emit `auto` mode from state
*
* When set to `true`, preferred mode won't be translated into `light` or `dark`.
* This is useful when the fact that `auto` mode was selected needs to be known.
*
* @default undefined
* @deprecated use `store.value` when `auto` mode needs to be known
* @see https://vueuse.org/core/useColorMode/#advanced-usage
*/
emitAuto?: boolean
/**
* Disable transition on switch
*
* @see https://paco.me/writing/disable-theme-transitions
* @default true
*/
disableTransition?: boolean
}
export type UseColorModeReturn<T extends string = BasicColorMode> = Ref<
T | BasicColorSchema
> & {
store: Ref<T | BasicColorSchema>
system: ComputedRef<BasicColorMode>
state: ComputedRef<T | BasicColorMode>
}
/**
* Reactive color mode with auto data persistence.
*
* @see https://vueuse.org/useColorMode
* @param options
*/
export declare function useColorMode<T extends string = BasicColorMode>(
options?: UseColorModeOptions<T>,
): UseColorModeReturn<T>