Composant d'évaluation n-rate

VérifiéSûr

Un composant d'évaluation pour recueillir les avis des utilisateurs avec icônes personnalisables, couleurs et support des demi-étoiles. Idéal pour les critiques de produits, formulaires de feedback et systèmes de notation.

Spar Skills Guide Bot
DeveloppementDébutant
54022/07/2026
Claude Code
#vue#naive-ui#rating#ui-component#frontend

Recommandé pour

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.
Quand l'utiliser

À utiliser pour ajouter rapidement une saisie ou un affichage de note dans une interface Vue 3 avec Naive UI.

Quand l'éviter

À é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ûr
Score qualité92/100

The 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 faite

Exemples

Basic star rating
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.
Half-star readonly display
Show a readonly n-rate with allow-half and a value of 4.5 for a product review summary in Naive UI.
Clearable 10-point rating
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'
  }
}
Skills similaires