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-group.md

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

TransitionGroup Component Best Practices

Impact: MEDIUM - <TransitionGroup> animates lists of items entering, leaving, and moving. Use it for v-for lists or dynamic collections where individual items change over time.

Task List

  • Use <TransitionGroup> only for lists and repeated items
  • Provide unique, stable keys for every direct child
  • Use tag when you need semantic or layout wrappers
  • Avoid the mode prop (not supported)
  • Use JavaScript hooks for staggered effects

Use TransitionGroup for Lists

<TransitionGroup> is designed for list items. Use tag to control the wrapper element when needed.

BAD:

<template>
  <TransitionGroup name="fade">
    <ComponentA />
    <ComponentB />
  </TransitionGroup>
</template>

GOOD:

<template>
  <TransitionGroup name="list" tag="ul">
    <li v-for="item in items" :key="item.id">
      {{ item.name }}
    </li>
  </TransitionGroup>
</template>

Always Provide Stable Keys

Keys are required. Without stable keys, Vue cannot track item positions and animations break.

BAD:

<template>
  <TransitionGroup name="list" tag="ul">
    <li v-for="(item, index) in items" :key="index">
      {{ item.name }}
    </li>
  </TransitionGroup>
</template>

GOOD:

<template>
  <TransitionGroup name="list" tag="ul">
    <li v-for="item in items" :key="item.id">
      {{ item.name }}
    </li>
  </TransitionGroup>
</template>

Do Not Use mode on TransitionGroup

mode is only for <Transition> because it swaps a single element. Use <Transition> if you need in/out sequencing.

BAD:

<template>
  <TransitionGroup name="list" tag="div" mode="out-in">
    <div v-for="item in items" :key="item.id">{{ item.name }}</div>
  </TransitionGroup>
</template>

GOOD:

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

Stagger List Animations with Data Attributes

For cascading list animations, pass the index to JavaScript hooks and compute delay per item.

<template>
  <TransitionGroup
    tag="ul"
    :css="false"
    @before-enter="onBeforeEnter"
    @enter="onEnter"
  >
    <li v-for="(item, index) in items" :key="item.id" :data-index="index">
      {{ item.name }}
    </li>
  </TransitionGroup>
</template>

<script setup>
function onBeforeEnter(el) {
  el.style.opacity = 0
  el.style.transform = 'translateY(12px)'
}

function onEnter(el, done) {
  const delay = Number(el.dataset.index) * 80
  setTimeout(() => {
    el.style.transition = 'all 0.25s ease'
    el.style.opacity = 1
    el.style.transform = 'translateY(0)'
    setTimeout(done, 250)
  }, delay)
}
</script>

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