SuperAPI AI 工具集

vue-best-practices

前端与建站

查看项目

更新于 10-16 14:51

技能介绍

用途

Vue Best Practices 是一个以“指令集”形式使用的技能,用于指导 Vue.js 相关任务的实现方式。它明确规定:在 Vue.js 任务中应遵循其工作流程,按顺序执行,除非用户明确要求不同的顺序。

该技能将 Vue 3 + Composition API + <script setup lang="ts"> 作为默认技术栈。如果项目明确使用 Options API,则提示加载 vue-options-api-best-practices 技能(如可用);如果项目明确使用 JSX,则提示加载 vue-jsx-best-practices 技能(如可用)。

主要能力

核心原则

  • 保持状态可预测:单一数据源,其余内容派生得到。
  • 让数据流显式:多数场景下 props 向下、events 向上。
  • 倾向于小而聚焦的组件:更易测试、复用与维护。
  • 避免不必要的重渲染:合理使用 computed 与 watchers。
  • 可读性很重要:编写清晰、自解释的代码。

编码前确认架构(必需)

默认技术栈为 Vue 3 + Composition API + <script setup lang="ts">。若项目使用 Options API 或 JSX,按前述规则切换到对应技能。

必读核心参考(必需)

在执行任何 Vue 任务前,需阅读并应用以下核心参考:

  • references/reactivity.md
  • references/sfc.md
  • references/component-data-flow.md
  • references/composables.md

这些参考需在整个任务过程中保持在工作上下文里,而不是只在出现特定问题时才查阅。

编码前规划组件边界(必需)

对于任何非简单功能,在实现前创建简要的组件地图,包括:用一句话定义每个组件的单一职责;默认将入口/根组件与路由级视图组件作为组合面;除非是刻意为之的极简单文件演示,否则将功能 UI 与功能逻辑移出入口/根/视图组件;在组件地图中为每个子组件定义 props/emits 契约;当添加超过一个组件时,优先采用按功能划分的目录布局(components/<feature>/...、composables/use<Feature>.ts)。

应用必要的 Vue 基础(必需)

响应性:保持源状态最小(ref/reactive),尽可能用 computed 派生;如需副作用使用 watchers;避免在模板中重复计算昂贵逻辑。

SFC 结构与模板安全:SFC 各区块顺序保持为 <script> → <template> → <style>;保持职责聚焦,拆分大型组件;模板保持声明式,把分支/派生移到 script;应用 Vue 模板安全规则(v-html、列表渲染、条件渲染的选择)。

保持组件聚焦:当一个组件有多个明确职责时进行拆分;优先使用更小的组件 + composables 而不是一个“巨型组件”;将 UI 区块移入子组件(props 进、events 出),将状态/副作用移入 composables(useXxx())。拆分触发条件包括:同时负责编排/状态与多个区块的大量展示性标记;拥有 3 个以上不同 UI 区块(如表单、过滤器、列表、页脚/状态);模板块重复或可复用。

入口/根与路由视图规则:保持入口/根与路由视图组件轻量,仅承担应用外壳/布局、provider 接线与功能组合;当功能包含独立部分时,不要把完整功能实现放在入口/根/视图中。对于 CRUD/列表类功能(todo、table、catalog、inbox),至少拆分为:功能容器组件、输入/表单组件、列表(和/或条目)组件、页脚/操作或过滤/状态组件。仅对非常小的临时演示允许单文件实现,若选择这样做需明确说明为何无需拆分。

组件数据流:以 props 向下、events 向上为主要模型;仅对真正的双向组件契约使用 v-model;仅对深层树依赖或共享上下文使用 provide/inject;通过 defineProps、defineEmits 以及按需的 InjectionKey 保持契约显式且带类型。

组合式函数:当逻辑被复用、有状态或副作用密集时抽入 composables;保持 composable API 小而带类型且可预测;将功能逻辑与展示型组件分离。

可选特性按需使用

默认不添加以下特性,仅在需求存在时加载对应参考:

  • Slots:父组件需要控制子内容/布局(component-slots)
  • Fallthrough attributes:包装/基础组件必须安全转发 attrs/events(component-fallthrough-attrs)
  • <KeepAlive>:有状态视图缓存(component-keep-alive)
  • <Teleport>:覆盖层/传送门(component-teleport)
  • <Suspense>:异步子树回退边界(component-suspense)
  • 动画:<Transition> 用于进入/离开效果(transition);<TransitionGroup> 用于列表变更动画(transition-group);基于 class 的动画用于非进入/离开效果(animation-class-based-technique);状态驱动动画用于用户输入驱动的动画(animation-state-driven-technique)

较少使用的可选特性,仅在明确的产品或技术需求下使用:指令(DOM 特定行为,不适合 composable/组件)、异步组件(重量级/少用 UI 懒加载)、仅在模板无法表达需求时使用渲染函数、需要应用级安装行为时使用插件、应用级共享状态跨功能边界时使用状态管理模式。

性能优化放在行为正确之后

性能工作是功能完成后的阶段。在核心行为实现并验证之前不要优化。相关参考包括:大列表渲染瓶颈(perf-virtualize-large-lists)、静态子树不必要重渲染(perf-v-once-v-memo-directives)、热列表路径中的过度抽象(perf-avoid-component-abstraction-in-lists)、过于频繁触发的昂贵更新(updated-hook-performance)。

完成前自查

核心行为可用且符合需求;所有必读参考都已阅读并应用;响应性模型最小且可预测;遵循 SFC 结构与模板规则;组件聚焦且分解合理,需要时进行拆分;入口/根与路由视图组件保持为组合面,除非有明确的小型演示例外;组件拆分决策显式且可辩护(职责边界清晰);数据流契约显式且带类型;在复用/复杂度合理处使用 composables;如适用,已将状态/副作用移入 composables;可选特性仅在需求需要时使用;性能改动仅在功能完成后应用。

使用方式

将该技能作为指令集使用,在 Vue.js 任务中按上述流程顺序执行。涉及架构确认、核心参考阅读、组件边界规划与基础规则应用的部分被标注为必需;可选特性与性能优化按需求触发。

适用场景

适用于 Vue.js 相关开发任务,尤其是需要遵循 Composition API 与 <script setup> + TypeScript 标准做法的项目;也覆盖 SSR、Volar 等方向(由来源描述提及)。具体覆盖范围与细节以该技能内的参考文件为准。

限制

关于收费、价格、平台支持范围、具体效果等事实,资料中暂未提供。