All skills
onmax avatar

/vue-best-practices

@de09c7b official
by Maxonmax/nuxt-skills715 stars
38

MUST be used for Vue.js tasks. Strongly recommends Composition API with `<script setup>` and TypeScript as the standard approach. Covers Vue 3, SSR, Volar, vue-tsc. Load for any Vue, .vue files, Vue Router, Pinia, or Vite with Vue work. ALWAYS use Composition API unless the project explicitly requires Options API.

Use this Skill: https://skilld.dev/gh/onmax/nuxt-skills/vue-best-practices

This session only. Nothing lands on disk.

referencescomponent-transition.md

≈683 tokens on demand. Your agent reads this file only when SKILL.md points to it.

Transition Component Best Practices

Impact: MEDIUM - <Transition> animates entering/leaving of a single element or component. It is ideal for toggling UI states, swapping views, or animating one component at a time.

Task List

  • Wrap a single element or component inside <Transition>
  • Provide a key when switching between same element types
  • Use mode="out-in" when you need sequential swaps
  • Prefer transform and opacity for smooth animations

Use Transition for a Single Root Element

<Transition> only supports one direct child. Wrap multiple nodes in a single element or component.

BAD:

<template>
  <Transition name="fade">
    <h3>Title</h3>
    <p>Description</p>
  </Transition>
</template>

GOOD:

<template>
  <Transition name="fade">
    <div>
      <h3>Title</h3>
      <p>Description</p>
    </div>
  </Transition>
</template>

Force Transitions Between Same Element Types

Vue reuses the same DOM element when the tag type does not change. Add key so Vue treats it as a new element and triggers enter/leave.

BAD:

<template>
  <Transition name="fade">
    <p v-if="isActive">Active</p>
    <p v-else>Inactive</p>
  </Transition>
</template>

GOOD:

<template>
  <Transition name="fade" mode="out-in">
    <p v-if="isActive" key="active">Active</p>
    <p v-else key="inactive">Inactive</p>
  </Transition>
</template>

Use mode to Avoid Overlap During Swaps

When swapping components or views, use mode="out-in" to prevent both from being visible at the same time.

BAD:

<template>
  <Transition name="fade">
    <component :is="currentView" />
  </Transition>
</template>

GOOD:

<template>
  <Transition name="fade" mode="out-in">
    <component :is="currentView" :key="currentView" />
  </Transition>
</template>

Animate transform and opacity for Performance

Avoid layout-triggering properties such as height, margin, or top. Use transform and opacity for smooth, GPU-friendly transitions.

BAD:

.slide-enter-active,
.slide-leave-active {
  transition: height 0.3s ease;
}

.slide-enter-from,
.slide-leave-to {
  height: 0;
}

GOOD:

.slide-enter-active,
.slide-leave-active {
  transition: transform 0.3s ease, opacity 0.3s ease;
}

.slide-enter-from {
  transform: translateX(-12px);
  opacity: 0;
}

.slide-leave-to {
  transform: translateX(12px);
  opacity: 0;
}

Source: SKILL.md on GitHub

No alerts9d3 checks · Risk SAFE
  • Gen Agent Trust Hub9d

    This skill provides a detailed set of best practices for Vue.js development, focusing on performance, state management, and component architecture. It includes security-conscious advice regarding the sanitization of HTML content. A minor security observation is noted regarding the potential for indirect prompt injection when handling untrusted user input, although the skill proactively provides mitigations for this risk.

  • Socket9d

    No alerts

  • Snyk9d

    Risk: LOW · No issues

Signed by skilld at de09c7b. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 2 days ago.

Activeupdated last week
metadata
{
  "author": "github.com/vuejs-ai",
  "version": "18.0.0"
}

README badge

README badge for onmax/nuxt-skills/vue-best-practices