Synthèse automatique
Référence d'utilisation du composant de notation n-rate de Naive UI pour Vue 3, avec des exemples d'étoiles, d'icônes personnalisées et de demi-étoiles.
Points forts
- Couvre les cas courants : taille, couleur, icône personnalisée, lecture seule, effacement et nombre d'icônes.
- Fournit des exemples Vue copiables avec liaison v-model et gestion d'événement.
- Décrit clairement les props principales et leurs valeurs par défaut.
Limites
- Se limite au composant n-rate et ne traite pas de l'intégration dans un formulaire ou de la validation.
- Ne détaille pas l'accessibilité, les interactions clavier ou le rendu SSR.
- Suppose un projet Vue 3 déjà configuré avec Naive UI.
À utiliser pour ajouter rapidement une saisie ou un affichage de note dans une interface Vue 3 avec Naive UI.
À éviter si vous cherchez une solution de notation complète avec validation, accessibilité détaillée ou hors de l'écosystème Naive UI.
Analyse de sécurité
SûrThe skill is a documentation guide for the n-rate Vue component. It contains only descriptive text, code examples, and API reference. No executable commands, no network access, no destructive actions, and no sensitive data handling. No allowed tools are declared, and the content does not instruct any risky operations.
Aucun point d'attention détecté
Comment cette analyse est faiteExemples
Add a Naive UI n-rate component to my Vue 3 page, bind it to a ref named rating, and display the current value below it.Show a readonly n-rate with allow-half and a value of 4.5 for a product review summary in Naive UI.Create a clearable n-rate with count 10, a custom color, bind it with v-model, and log when the user clears the rating.name: n-rate description: A rating component for collecting user feedback with customizable icons, colors, and half-star support in Naive UI. Ideal for product reviews, feedback forms, and rating systems. metadata: author: jiaiyan version: 1.0.0
n-rate Component
The n-rate component allows users to provide ratings, typically represented as stars or custom icons. It supports half-star ratings, custom colors, and various sizes.
When to Use
Use n-rate when you need to:
- Product Reviews: Allow users to rate products or services
- Feedback Collection: Gather user satisfaction ratings
- Content Rating: Rate articles, videos, or other content
- Skill Assessment: Display or collect skill level ratings
- Quick Evaluation: Provide a simple, intuitive rating interface
Basic Usage
Basic Rate
A simple 5-star rating component.
<template>
<n-rate v-model:value="rating" />
<p>Rating: {{ rating }}</p>
</template>
<script setup>
import { ref } from 'vue'
const rating = ref(0)
</script>
Different Sizes
Rate supports small, medium, large sizes, or custom numeric sizes.
<template>
<n-space align="center">
<n-rate size="small" v-model:value="small" />
<n-rate size="medium" v-model:value="medium" />
<n-rate size="large" v-model:value="large" />
<n-rate :size="30" v-model:value="custom" />
</n-space>
</template>
<script setup>
import { ref } from 'vue'
const small = ref(3)
const medium = ref(3)
const large = ref(3)
const custom = ref(3)
</script>
Custom Color
Customize the color of active icons.
<template>
<n-space vertical>
<n-rate color="#4fb233" v-model:value="rating1" />
<n-rate color="#f0a020" v-model:value="rating2" />
<n-rate color="rgb(255, 0, 100)" v-model:value="rating3" />
</n-space>
</template>
<script setup>
import { ref } from 'vue'
const rating1 = ref(4)
const rating2 = ref(3)
const rating3 = ref(5)
</script>
Custom Icon
Use custom icons via the default slot.
<template>
<n-rate v-model:value="rating">
<template #default>
<n-icon size="20">
<CashIcon />
</n-icon>
</template>
</n-rate>
</template>
<script setup>
import { ref } from 'vue'
import { CashOutline as CashIcon } from '@vicons/ionicons5'
const rating = ref(3)
</script>
Half Star Rating
Enable half-star precision with allow-half.
<template>
<n-rate allow-half v-model:value="rating" />
<p>Rating: {{ rating }}</p>
</template>
<script setup>
import { ref } from 'vue'
const rating = ref(3.5)
</script>
Readonly Mode
Display rating without user interaction.
<template>
<n-space vertical>
<n-rate readonly :value="3" />
<n-rate readonly :value="4.5" allow-half />
<n-rate readonly :value="2" color="#ff6b6b" />
</n-space>
</template>
Clearable
Allow users to clear the rating by clicking on the current value.
<template>
<n-rate clearable allow-half v-model:value="rating" @clear="handleClear" />
<p>Rating: {{ rating }}</p>
</template>
<script setup>
import { ref } from 'vue'
const rating = ref(3.5)
const handleClear = () => {
console.log('Rating cleared')
}
</script>
Custom Count
Set a custom maximum rating value.
<template>
<n-rate :count="10" v-model:value="rating" />
<p>Rating: {{ rating }} / 10</p>
</template>
<script setup>
import { ref } from 'vue'
const rating = ref(7)
</script>
API Reference
n-rate Props
| Name | Type | Default | Description |
|------|------|---------|-------------|
| allow-half | boolean | false | Allow activating half of the icon |
| clearable | boolean | false | Whether the rate is clearable. Clicking on current value resets to null |
| color | string | undefined | Activated icon color. Supports #FFF, #FFFFFF, yellow, rgb(0, 0, 0) formats |
| count | number | 5 | Number of icons (maximum rating) |
| default-value | number \| null | null | Default value of activated icons |
| readonly | boolean | false | Readonly state |
| size | 'small' \| 'medium' \| 'large' \| number | 'medium' | Icon size |
| value | number \| null | undefined | Value of activated icons (controlled mode) |
Events
| Name | Parameters | Description |
|------|------------|-------------|
| on-clear | () => void | Callback when value is cleared |
| on-update:value | (value: number) => void | Callback when the value (rating) changes |
Slots
| Name | Parameters | Description |
|------|------------|-------------|
| default | (info: { index: number }) | Custom icon for the rating. index is the position (0-based) |
Common Patterns
Rate in Form
<template>
<n-form ref="formRef" :model="formData" :rules="rules">
<n-form-item label="Overall Rating" path="rating">
<n-rate allow-half clearable v-model:value="formData.rating" />
<span style="margin-left: 12px">{{ formData.rating || 0 }} / 5</span>
</n-form-item>
<n-form-item label="Service Quality" path="serviceRating">
<n-rate v-model:value="formData.serviceRating" />
</n-form-item>
<n-form-item>
<n-button type="primary" @click="handleSubmit">Submit Review</n-button>
</n-form-item>
</n-form>
</template>
<script setup>
import { ref } from 'vue'
const formData = ref({
rating: null,
serviceRating: 0
})
const rules = {
rating: {
required: true,
type: 'number',
min: 1,
message: 'Please provide a rating',
trigger: 'change'
}
}
const handleSubmit = () => {
console.log('Review submitted:', formData.value)
}
</script>
Display Rating with Text
<template>
<n-space align="center">
<n-rate readonly :value="productRating" allow-half />
<span>{{ productRating.toFixed(1) }}</span>
<span style="color: #999">({{ reviewCount }} reviews)</span>
</n-space>
</template>
<script setup>
const productRating = 4.5
const reviewCount = 128
</script>
Emoji Rating
<template>
<n-rate :count="5" v-model:value="emojiRating">
<template #default="{ index }">
<span style="font-size: 24px">{{ getEmoji(index) }}</span>
</template>
</n-rate>
<p>Selected: {{ getEmojiLabel(emojiRating) }}</p>
</template>
<script setup>
import { ref } from 'vue'
const emojiRating = ref(3)
const emojis = ['😠', '😕', '😐', '😊', '😄']
const labels = ['Very Bad', 'Bad', 'Okay', 'Good', 'Excellent']
const getEmoji = (index) => emojis[index] || '😐'
const getEmojiLabel = (value) => labels[Math.floor(value) - 1] || 'Not rated'
</script>
Rating with Feedback
<template>
<n-space vertical>
<n-rate v-model:value="rating" @update:value="handleRatingChange" />
<n-tag v-if="feedbackText" :type="feedbackType">
{{ feedbackText }}
</n-tag>
</n-space>
</template>
<script setup>
import { ref, computed } from 'vue'
const rating = ref(0)
const feedbackMap = {
1: { text: 'Very Dissatisfied', type: 'error' },
2: { text: 'Dissatisfied', type: 'warning' },
3: { text: 'Neutral', type: 'default' },
4: { text: 'Satisfied', type: 'success' },
5: { text: 'Very Satisfied', type: 'success' }
}
const feedbackText = computed(() => feedbackMap[rating.value]?.text || '')
const feedbackType = computed(() => feedbackMap[rating.value]?.type || 'default')
const handleRatingChange = (value) => {
console.log('Rating changed to:', value)
}
</script>
Best Practices
1. Use Half-Star for Precise Ratings
Enable allow-half when users need to provide more precise ratings:
<template>
<n-rate allow-half v-model:value="rating" />
</template>
2. Provide Clear Feedback
Show the current rating value alongside the component:
<template>
<n-space align="center">
<n-rate v-model:value="rating" />
<span>{{ rating }} / 5</span>
</n-space>
</template>
3. Use Readonly for Display
When displaying existing ratings, use readonly mode:
<template>
<n-rate readonly :value="averageRating" allow-half />
</template>
4. Consider Clearable Option
Allow users to reset their rating when appropriate:
<template>
<n-rate clearable v-model:value="rating" />
</template>
5. Use Custom Colors Wisely
Choose colors that match your design system and are accessible:
<template>
<n-rate color="#18a058" v-model:value="rating" />
</template>
6. Match Size with Context
Use appropriate sizes based on the context:
<template>
<n-space vertical>
<n-rate size="small" v-model:value="compact" />
<n-rate size="medium" v-model:value="standard" />
<n-rate size="large" v-model:value="prominent" />
</n-space>
</template>
7. Validate in Forms
Add validation rules when using in forms:
const rules = {
rating: {
required: true,
type: 'number',
min: 1,
message: 'Please provide a rating',
trigger: 'change'
}
}
Specification Design-to-Dev
Developpement
Traduisez vos maquettes en specifications techniques pour les developpeurs.
Patterns d'exports et fichiers barrel
Developpement
Définit les conventions pour les exports de modules et les fichiers baril : exports nommés uniquement, pas de wildcards plats (sauf `export * as Name` pour les composants composés), commentaires par section, types exportés avec les valeurs, et une ligne d'export par fichier source. Aide à maintenir des exports cohérents et optimisés pour le tree-shaking dans les applications portal utilisant Turbopack ou des bundlers similaires.
Créer une compétence d'agent
Developpement
Guide étape par étape pour créer une compétence d'agent structurée, incluant structure de répertoire, format SKILL.md et principes de conception.