Skip to content

主题

vue-styled-components 提供了一个 ThemeProvider 组件,用于为您的组件设置主题。此组件通过 props 将主题传递给其所有后代 Vue 组件。渲染树中的所有样式化组件都可以访问提供的主题。

基本使用

ThemeProvider 包裹其子组件并向它们传递一个主题对象。ThemeProvider 范围内的所有样式化组件都可以访问此主题对象。

在此示例中,StyledLink 组件使用了提供的主题中的主色。

响应式主题

您还可以基于 Vue 的响应性系统使主题具有响应性。这使您可以动态更改主题。

函数式主题

在某些情况下,您可能需要使用函数主题,而不是对象主题。例如,您可能需要反转颜色,或者根据其他条件动态更改颜色。

在非 Styled 组件中使用主题

通过在 ThemeProvider 中定义主题,您确保所有组件都可以访问相同的主题样式,从而实现全局一致的视觉外观。即使在 Vue 中的 非Styled组件 也可以通过注入 $theme 并使用主题中定义的属性来访问主题,从而为其样式设置使用主题。

通过 Hook 获取主题

你还可以通过 useTheme 获取主题,但前提是必须属于 ThemeProvider 的组件树内。

使用方法参考 useTheme

如何通过 TypeScript 获取主题提示?

在使用 styled 组件时,你可能会通过 ${props => props.theme.primary} 引用你的主题上下文。为了让 TypeScript 能够提供自动补全提示并进行类型检查,你可以扩展 DefaultTheme 接口。

ts
// xxx.d.ts
import '@vue-styled-components/core';

export {};

interface Theme {
  primary: string;
}

declare module '@vue-styled-components/core' {
  export interface DefaultTheme extends Theme {}
}

通过定义并扩展 Theme 接口,TypeScript 将能够识别你的自定义主题属性,并在你使用 ${props => props.theme.primary} 时提供相应的提示。

根据 Apache-2.0 许可发布。