Marketplace

vue-composition-api

Master Vue Composition API - Composables, Reactivity Utilities, Script Setup, Provide/Inject

$ 安裝

git clone https://github.com/pluginagentmarketplace/custom-plugin-vue /tmp/custom-plugin-vue && cp -r /tmp/custom-plugin-vue/skills/vue-composition-api ~/.claude/skills/custom-plugin-vue

// tip: Run this command in your terminal to install the skill


name: vue-composition-api description: Master Vue Composition API - Composables, Reactivity Utilities, Script Setup, Provide/Inject sasmp_version: "1.3.0" bonded_agent: 02-vue-composition bond_type: PRIMARY_BOND version: "2.0.0" last_updated: "2025-01"

Vue Composition API Skill

Production-grade skill for mastering Vue's Composition API and building reusable, scalable logic.

Purpose

Single Responsibility: Teach composable design patterns, advanced reactivity utilities, and modern Vue 3 composition techniques.

Parameter Schema

interface CompositionAPIParams {
  topic: 'composables' | 'reactivity' | 'script-setup' | 'provide-inject' | 'all';
  level: 'beginner' | 'intermediate' | 'advanced';
  context?: {
    existing_knowledge?: string[];
    use_case?: string;
  };
}

Learning Modules

Module 1: Script Setup Basics

Prerequisites: vue-fundamentals
Duration: 1-2 hours
Outcome: Use <script setup> effectively
TopicConceptExercise
Syntax<script setup> shorthandConvert Options API
definePropsType-safe propsTyped component
defineEmitsType-safe eventsEvent handling
defineExposePublic APIComponent ref access

Module 2: Reactivity Deep Dive

Prerequisites: Module 1
Duration: 3-4 hours
Outcome: Master all reactivity utilities
UtilityWhen to UseExercise
ref()PrimitivesCounter state
reactive()ObjectsForm state
readonly()Immutable exposureStore state
toRef()Single prop referenceProps handling
toRefs()Destructure reactiveStore destructure
shallowRef()Large objectsPerformance opt
customRef()Custom behaviorDebounced input

Module 3: Composables Architecture

Prerequisites: Modules 1-2
Duration: 4-5 hours
Outcome: Design production composables

Composable Anatomy:

// composables/useFeature.ts
export function useFeature(options?: Options) {
  // 1. State (refs)
  const state = ref(initialValue)

  // 2. Computed (derived)
  const derived = computed(() => transform(state.value))

  // 3. Methods (actions)
  function action() { /* ... */ }

  // 4. Lifecycle (setup/cleanup)
  onMounted(() => { /* setup */ })
  onUnmounted(() => { /* cleanup */ })

  // 5. Return (public API)
  return { state: readonly(state), derived, action }
}
ExerciseComposableFeatures
Data FetchinguseFetchloading, error, refetch
Local StorageuseStoragesync, parse, stringify
Media QueryuseMediaQueryreactive breakpoints
DebounceuseDebouncevalue, delay
IntersectionuseIntersectionobserver, cleanup

Module 4: Provide/Inject Patterns

Prerequisites: Module 3
Duration: 2 hours
Outcome: Share state across components
PatternUse CaseExample
Theme ProviderApp-wide themingDark/light mode
Auth ContextUser stateAuth provider
Config InjectionFeature flagsRuntime config
Form ContextMulti-step formsForm validation

Module 5: Advanced Patterns

Prerequisites: Modules 1-4
Duration: 3-4 hours
Outcome: Expert-level composition
PatternDescriptionExercise
Composable CompositionComposables using composablesuseAuth + useFetch
State MachinesFinite state composablesuseWizard
Plugin PatternExtend with pluginsuseLogger plugin
Async ComposablesHandle async setupuseAsyncData

Validation Checkpoints

Beginner Checkpoint

  • Convert Options API to Composition
  • Use ref and computed
  • Write basic composable
  • Use defineProps/Emits

Intermediate Checkpoint

  • Build reusable composable
  • Implement cleanup in composable
  • Use provide/inject correctly
  • Handle async in composables

Advanced Checkpoint

  • Design composable library
  • Compose multiple composables
  • Implement SSR-safe composables
  • Test composables in isolation

Retry Logic

const skillConfig = {
  maxAttempts: 3,
  backoffMs: [1000, 2000, 4000],
  onFailure: 'provide_simpler_example'
}

Observability

tracking:
  - event: composable_created
    data: [name, complexity_score]
  - event: pattern_learned
    data: [pattern_name, exercises_completed]
  - event: skill_mastery
    data: [modules_completed, project_quality]

Troubleshooting

Common Issues

IssueCauseSolution
Lost reactivityDestructured reactiveUse toRefs()
inject undefinedMissing providerCheck tree hierarchy
Memory leakNo cleanupAdd onUnmounted cleanup
Type errorsWrong genericsSpecify type params

Debug Steps

  1. Verify composable returns refs (not raw values)
  2. Check provide/inject key matches
  3. Confirm lifecycle hooks are in setup
  4. Use Vue Devtools to inspect state

Unit Test Template

import { describe, it, expect } from 'vitest'
import { useCounter } from './useCounter'

describe('useCounter', () => {
  it('initializes with default value', () => {
    const { count } = useCounter()
    expect(count.value).toBe(0)
  })

  it('increments correctly', () => {
    const { count, increment } = useCounter()
    increment()
    expect(count.value).toBe(1)
  })

  it('resets to initial value', () => {
    const { count, increment, reset } = useCounter(5)
    increment()
    increment()
    reset()
    expect(count.value).toBe(5)
  })
})

Usage

Skill("vue-composition-api")

Related Skills

  • vue-fundamentals - Prerequisite
  • vue-pinia - State management
  • vue-typescript - Type-safe composables

Resources