用途:该技能用于在使用 cva 定义组件变体、暴露变体 props、组合样式、处理类名冲突等场景中提供最佳实践指导。使用时先读取项目清单、锁文件和现有导入,确认安装的是 cva@1.0.0-beta.x 还是 class-variance-authority@0.x,两者 API 不同;本文针对 cva 1.0 beta(验证于 cva@1.0.0-beta.12),不应把仅限 beta 的配置、组合、schema 或 Tailwind 导出用于稳定版项目,也不应在普通组件工作中升级依赖。
主要能力与要点:在组件渲染体外定义 class function,基础类放 base,独立选项放 variants,组合放 compoundVariants;配置创建后视为不可变。优先在 React、Svelte、Vue 包装器使用框架 prop 默认值,让样式与标记拿到同一值;defaultVariants 只影响 class function 内部默认。用 VariantProps<typeof button> 推断变体类型,不要重复变体联合;React 包装器应把 className 转发给 class function,语义 prop 如 disabled 也要传到真实 HTML 元素。预设导出 cx(基于 clsx)用于拼接字符串、嵌套数组和条件对象,它不会去重或解决 CSS 冲突。Tailwind 场景要写完整工具类字符串,不要拼接片段。
类名冲突与组合:按项目现有策略处理覆盖,如使用 cn 合并、cva/tailwindcss 的 base: 前缀或 tailwind-merge 与 cx 组合;用 composes 复用 cva class function,默认值合并时最后组合的默认值胜出,随后本地默认值优先。cva 不解释响应式变体对象,响应式样式需在 CSS 中表达或定义断点变体。
工具与限制:getSchema 应用于 cva class function 而非框架包装器,可在渲染外读取 schema 生成画廊或文档。资料未提供收费、价格、平台及效果等信息。