From harness-claude
> Extract and reuse stateful logic across components using Vue composables
npx claudepluginhub intense-visions/harness-engineering --plugin harness-claudeThis skill uses the workspace's default tool permissions.
> Extract and reuse stateful logic across components using Vue composables
Creates Vue composable creator operations for reusable reactive logic. Provides step-by-step guidance, generates code, and configurations following best practices. Triggers on 'vue composable creator' phrases.
Provides Vue 3 Composition API guidance on setup(), script setup syntax, ref vs reactive for scalable, maintainable apps.
Provides Vue 3 frontend patterns for Composition API components, Pinia state management, composables like data fetching and debouncing, provide/inject, forms, and performance optimizations including computed and v-memo.
Share bugs, ideas, or general feedback.
Extract and reuse stateful logic across components using Vue composables
<script setup> for readability and reuseuse (e.g., useWindowSize, useFetch).ref, reactive, computed, watch, and lifecycle hooks as needed.composables/ directory.// composables/useWindowSize.ts
import { ref, onMounted, onUnmounted } from 'vue';
export function useWindowSize() {
const width = ref(window.innerWidth);
const height = ref(window.innerHeight);
function update() {
width.value = window.innerWidth;
height.value = window.innerHeight;
}
onMounted(() => window.addEventListener('resize', update));
onUnmounted(() => window.removeEventListener('resize', update));
return { width, height };
}
Composables are the Vue 3 Composition API's answer to code reuse. They replace mixins, which suffered from namespace collisions, implicit dependencies, and unclear data sources. A composable is a plain function that uses Vue's reactivity primitives, making dependencies explicit.
Trade-offs:
setup() — they cannot be used conditionally or in loops (similar to React hooks rules)When NOT to use:
<script setup> until reuse is neededhttps://patterns.dev/vue/composables-pattern