Single-File Component
ساختار پایهٔ SFC با script setup، template و style.
<script setup>import { ref } from "vue";const count = ref(0);</script><template> <button @click="count++">Count: {{ count }}</button></template>
مرجع Vue 3 برای ساخت کامپوننت، template، دادهٔ واکنشی، فرم و تعامل میان اجزا با Composition API. Vue 3 کامپوننتهای declarative را از template، منطق و style میسازد. در پروژههای مبتنی بر build، Single-File Component قالب رایج است. ref برای مقدارهای واکنشی و computed برای مقدارهای مشتقشده مناسب است. از key پایدار برای نگهداشتن هویت آیتمهای فهرست استفاده کنید. از این صفحه بهعنوان مرجع سریع استفاده کنید و مثالها و نکتهها را با نسخهٔ ابزار، نیاز و شرایط واقعی پروژهٔ خود تطبیق دهید.
ساختار پایهٔ SFC با script setup، template و style.
<script setup>import { ref } from "vue";const count = ref(0);</script><template> <button @click="count++">Count: {{ count }}</button></template>با interpolation مقدار واکنشی را در متن template نمایش دهید.
<script setup>const message = "Hello, Vue!";</script><template> <h1>{{ message }}</h1></template>برای اتصال attribute یا class از directive کوتاه v-bind استفاده کنید.
<script setup>const isActive = true;const link = "/docs";</script><template> <a :href="link" :class="{ active: isActive }">Docs</a></template>مقدار مشتقشده را با computed نگه دارید، نه state تکراری.
<script setup>import { computed, ref } from "vue";const count = ref(0);const doubled = computed(() => count.value * 2);</script>v-if بلوک را شرطی میسازد؛ v-show نمایش CSS را تغییر میدهد.
<template> <p v-if="hasAccess">دسترسی مجاز است.</p> <p v-else>برای ادامه وارد شوید.</p> <aside v-show="showHelp">راهنما</aside></template>key یکتا کمک میکند Vue هویت هر آیتم را هنگام بهروزرسانی حفظ کند.
<script setup>const items = [ { id: "a1", name: "One" }, { id: "b2", name: "Two" },];</script><template> <li v-for="item in items" :key="item.id">{{ item.name }}</li></template>watch را برای همگامسازی یا واکنش به تغییر منبع مشخص بهکار ببرید.
<script setup>import { ref, watch } from "vue";const query = ref("");watch(query, (newQuery, oldQuery) => { console.log({ newQuery, oldQuery });});</script>نوع و قرارداد prop را در مرز کامپوننت مشخص کنید.
<script setup lang="ts">defineProps<{ title: string; compact?: boolean;}>();</script>فرزند بهجای تغییر مستقیم prop، رویداد معنادار emit میکند.
<script setup>const emit = defineEmits(["select"]);</script><template> <button @click="emit('select', 'item-1')">Select</button></template>v-model مقدار فرم و state را دوطرفه همگام میکند.
<script setup>import { ref } from "vue";const name = ref("");</script><template> <input v-model="name" autocomplete="name"> <p>{{ name }}</p></template>کار وابسته به DOM را پس از mount اجرا کنید.
<script setup>import { onMounted, onUnmounted } from "vue";function onResize() { console.log(window.innerWidth);}onMounted(() => window.addEventListener("resize", onResize));onUnmounted(() => window.removeEventListener("resize", onResize));</script>کامپوننت importشده را در template با نام قابلخواندن استفاده کنید.
<script setup>import UserCard from "./UserCard.vue";</script><template> <UserCard title="Profile" /></template>در پروژهای که Vue Router دارد، مسیر را با RouterLink به مقصد وصل کنید.
<template> <RouterLink to="/settings">Settings</RouterLink> <RouterView /></template>کامپوننتهای SFC را با بخشهای script، template و style سازماندهی کنید.
برای دادهٔ قابلتغییر از ref و برای مقدار مشتقشده از computed استفاده کنید.
برای شرط و تکرار از v-if، v-show و v-for همراه key پایدار بهره ببرید.
داده را با props به فرزند بدهید و رویداد معنادار را برای تغییر به والد emit کنید.
برای state فرم از v-model استفاده و ورودی را متناسب با نیاز اعتبارسنجی کنید.
اثر وابسته به چرخهٔ عمر را با lifecycle hook مناسب اجرا و پاکسازی کنید.
در templateها از directiveهای v-bind، v-on و shorthandهای : و @ استفاده کنید.
Vue Router را برای routeهای SPA بهکار ببرید و routeهای حساس را در برنامه کنترل کنید.
از دستکاری مستقیم DOM پرهیز و به سیستم واکنشی Vue اجازهٔ بهروزرسانی رابط را بدهید.
برای پروژههای جدید از Vue 3 و مستندات نسخهٔ جاری استفاده کنید.
این راهنما بر Vue 3 و Composition API تمرکز دارد؛ پروژههای Vue 2 یا Options API ممکن است به الگوی متفاوت نیاز داشته باشند.
برای فهرستهای قابلتغییر، key پایدار بدهید و برای منابع خارجی مانند listener یا timer در lifecycle مناسب cleanup انجام دهید.