vue-best-practices
Guide des bonnes pratiques Vue.js 3 couvrant la Composition API, la conception de composants, les patrons de réactivité, le styling utility-first avec Tailwind CSS, l'intégration native de la bibliothèque de composants PrimeVue et l'organisation du code. À utiliser lors de l'écriture, la revue ou le refactoring de code Vue.js pour garantir des patrons idiomatiques et un code maintenable.
What this skill does
# Vue.js Best Practices Comprehensive best practices guide for Vue.js 3 applications. Contains guidelines across multiple categories to ensure idiomatic, maintainable, and scalable Vue.js code, including Tailwind CSS integration patterns for utility-first styling and PrimeVue component library best practices. ## When to Apply Reference these guidelines when: - Writing new Vue components or composables - Implementing features with Composition API - Reviewing code for Vue.js patterns compliance - Refactoring existing Vue.js code - Setting up component architecture - Working with Nuxt.js applications - Styling Vue components with Tailwind CSS utility classes - Creating design systems with Tailwind and Vue - Using PrimeVue component library natively - Customizing PrimeVue theme through design tokens and definePreset() ## Rule Categories | Category | Focus | Prefix | |----------|-------|--------| | Composition API | Proper use of Composition API patterns | `composition-` | | Component Design | Component structure and organization | `component-` | | Reactivity | Reactive state management patterns | `reactive-` | | Props & Events | Component communication patterns | `props-` | | Template Patterns | Template syntax best practices | `template-` | | Code Organization | Project and code structure | `organization-` | | TypeScript | Type-safe Vue.js patterns | `typescript-` | | Error Handling | Error boundaries and handling | `error-` | | Tailwind CSS | Utility-first styling patterns | `tailwind-` | | PrimeVue | Component library integration patterns | `primevue-` | ## Quick Reference ### 1. Composition API Best Practices - `composition-script-setup` - Always use `<script setup>` for single-file components - `composition-ref-vs-reactive` - Use `ref()` for primitives, `reactive()` for objects - `composition-computed-derived` - Use `computed()` for all derived state - `composition-watch-side-effects` - Use `watch()`/`watchEffect()` only for side effects - `composition-composables` - Extract reusable logic into composables - `composition-lifecycle-order` - Place lifecycle hooks after reactive state declarations - `composition-avoid-this` - Never use `this` in Composition API ### 2. Component Design - `component-single-responsibility` - One component, one purpose - `component-naming-convention` - Use PascalCase for components, kebab-case in templates - `component-small-focused` - Keep components under 200 lines - `component-presentational-container` - Separate logic from presentation when beneficial - `component-slots-flexibility` - Use slots for flexible component composition - `component-expose-minimal` - Only expose what's necessary via `defineExpose()` ### 3. Reactivity Patterns - `reactive-const-refs` - Always declare refs with `const` - `reactive-unwrap-template` - Let Vue unwrap refs in templates (no `.value`) - `reactive-shallow-large-data` - Use `shallowRef()`/`shallowReactive()` for large non-reactive data - `reactive-readonly-props` - Use `readonly()` to prevent mutations - `reactive-toRefs-destructure` - Use `toRefs()` when destructuring reactive objects - `reactive-avoid-mutation` - Prefer immutable updates for complex state ### 4. Props & Events - `props-define-types` - Always define prop types with `defineProps<T>()` - `props-required-explicit` - Be explicit about required vs optional props - `props-default-values` - Provide sensible defaults with `withDefaults()` - `props-immutable` - Never mutate props directly - `props-validation` - Use validator functions for complex prop validation - `events-define-emits` - Always define emits with `defineEmits<T>()` - `events-naming` - Use kebab-case for event names in templates - `events-payload-objects` - Pass objects for events with multiple values ### 5. Template Patterns - `template-v-if-v-show` - Use `v-if` for conditional rendering, `v-show` for toggling - `template-v-for-key` - Always use unique, stable `:key` with `v-for` - `template-v-if-v-for` - Never use `v-if` and `v-for` on the same element - `template-computed-expressions` - Move complex expressions to computed properties - `template-event-modifiers` - Use event modifiers (`.prevent`, `.stop`) appropriately - `template-v-bind-shorthand` - Use shorthand syntax (`:` for `v-bind`, `@` for `v-on`) - `template-v-model-modifiers` - Use v-model modifiers (`.trim`, `.number`, `.lazy`) ### 6. Code Organization - `organization-feature-folders` - Organize by feature, not by type - `organization-composables-folder` - Keep composables in dedicated `composables/` folder - `organization-barrel-exports` - Use index files for clean imports - `organization-consistent-naming` - Follow consistent naming conventions - `organization-colocation` - Colocate related files (component, tests, styles) ### 7. TypeScript Integration - `typescript-generic-components` - Use generics for reusable typed components - `typescript-prop-types` - Use TypeScript interfaces for prop definitions - `typescript-emit-types` - Type emit payloads explicitly - `typescript-ref-typing` - Specify types for refs when not inferred - `typescript-template-refs` - Type template refs with `ref<InstanceType<typeof Component> | null>(null)` ### 8. Error Handling - `error-boundaries` - Use `onErrorCaptured()` for component error boundaries - `error-async-handling` - Handle errors in async operations explicitly - `error-provide-fallbacks` - Provide fallback UI for error states - `error-logging` - Log errors appropriately for debugging ### 9. Tailwind CSS - `tailwind-utility-first` - Apply utility classes directly in templates, avoid custom CSS - `tailwind-class-order` - Use consistent class ordering (layout → spacing → typography → visual) - `tailwind-responsive-mobile-first` - Use mobile-first responsive design (`sm:`, `md:`, `lg:`) - `tailwind-component-extraction` - Extract repeated utility patterns into Vue components - `tailwind-dynamic-classes` - Use computed properties or helper functions for dynamic classes - `tailwind-complete-class-strings` - Always use complete class strings, never concatenate - `tailwind-state-variants` - Use state variants (`hover:`, `focus:`, `active:`) for interactions - `tailwind-dark-mode` - Use `dark:` prefix for dark mode support - `tailwind-design-tokens` - Configure design tokens in Tailwind config for consistency - `tailwind-avoid-apply-overuse` - Limit `@apply` usage; prefer Vue components for abstraction ### 10. PrimeVue - `primevue-use-natively` - Use PrimeVue components as-is with their documented props and API - `primevue-design-tokens` - Customize appearance exclusively through design tokens and `definePreset()` - `primevue-no-pt-overrides` - NEVER use PassThrough (pt) API to restyle components - `primevue-no-unstyled-mode` - NEVER use unstyled mode to strip and rebuild component styles - `primevue-no-wrapper-components` - NEVER wrap PrimeVue components just to override their styling - `primevue-props-api` - Use built-in props (severity, size, outlined, rounded, raised, text) for variants - `primevue-css-layers` - Configure CSS layer ordering for clean Tailwind coexistence - `primevue-typed-components` - Leverage PrimeVue's TypeScript support for type safety - `primevue-accessibility` - Maintain WCAG compliance with proper aria attributes - `primevue-lazy-loading` - Use async components for large PrimeVue imports ## Key Principles ### Composition API Best Practices The Composition API is the recommended approach for Vue.js 3. Follow these patterns: - **Always use `<script setup>`**: More concise, better TypeScript inference, and improved performance - **Organize code by logical concern**: Group related state, computed properties, and functions together - **Extract reusable logic to composables**: Follow the `use` prefix convention (e.g., `useAuth`, `useFetch`) - **Keep setup code readable**: Order: props/emits, reactive state, computed, watchers, methods, lifecycle hooks ### Component Design Principles Well-designed components ar
Related in Web Dev
generating-lwc-components
IncludedLightning Web Components with PICKLES methodology and 165-point scoring. Use this skill when the user creates or edits LWC components, builds wire service patterns, or writes Jest tests for LWC. TRIGGER when: user creates/edits LWC components, touches lwc/**/*.js, .html, .css, .js-meta.xml files, or asks about wire service, SLDS, or Jest LWC tests. DO NOT TRIGGER when: Apex classes (use generating-apex), Aura components, or Visualforce.
tanstack-query
IncludedManage server state in React with TanStack Query v5. Set up queries with useQuery, mutations with useMutation, configure QueryClient caching strategies, implement optimistic updates, and handle infinite scroll with useInfiniteQuery. Use when: setting up data fetching in React projects, migrating from v4 to v5, or fixing object syntax required errors, query callbacks removed issues, cacheTime renamed to gcTime, isPending vs isLoading confusion, keepPreviousData removed problems.
document-processor-api
IncludedProcess documents with Nutrient DWS. Use when the user wants to generate PDFs from HTML or URLs, convert Office/images/PDFs, assemble or split packets, OCR scans, extract text/tables/key-value pairs, redact PII, watermark, sign, fill forms, optimize PDFs, or produce compliance outputs like PDF/A or PDF/UA. Triggers include convert to PDF, merge these PDFs, OCR this scan, extract tables, redact PII, sign this PDF, make this PDF/A, or linearize for web delivery.
nutrient-document-processing
IncludedProcess documents with Nutrient DWS. Use when the user wants to generate PDFs from HTML or URLs, convert Office/images/PDFs, assemble or split packets, OCR scans, extract text/tables/key-value pairs, redact PII, watermark, sign, fill forms, optimize PDFs, or produce compliance outputs like PDF/A or PDF/UA. Triggers include convert to PDF, merge these PDFs, OCR this scan, extract tables, redact PII, sign this PDF, make this PDF/A, or linearize for web delivery.
tanstack-query
IncludedManage server state in React with TanStack Query v5. Covers useMutationState, simplified optimistic updates, throwOnError, network mode (offline/PWA), and infiniteQueryOptions. Use when setting up data fetching, fixing v4→v5 migration errors (object syntax, gcTime, isPending, keepPreviousData), or debugging SSR/hydration issues with streaming server components.
accelint-nextjs-best-practices
IncludedNext.js performance optimization and best practices. Use when writing Next.js code (App Router or Pages Router); implementing Server Components, Server Actions, or API routes; optimizing RSC serialization, data fetching, or server-side rendering; reviewing Next.js code for performance issues; fixing authentication in Server Actions; or implementing Suspense boundaries, parallel data fetching, or request deduplication.