Vue.js چیست؟ آموزش کامل و جامع Vue.js
فهرست مطالب
Vue.js چیست؟
Vue.js یک فریمورک پیشرو جاوااسکریپت برای ساخت رابطهای کاربری است. این فریمورک به دلیل API ساده و انعطافپذیر، عملکرد فوقالعاده و حجم کم، محبوبیت زیادی در میان توسعهدهندگان دارد.
<template>
<div id="app">
<h1>{{ message }}</h1>
<button @click="reverseMessage">معکوس کردن پیام</button>
</div>
</template>
<script>
export default {
data() {
return {
message: 'سلام دنیا!'
}
},
methods: {
reverseMessage() {
this.message = this.message.split('').reverse().join('')
}
}
}
</script>
تاریخچه Vue.js
Vue.js در سال 2014 توسط Evan You، زمانی که در گوگل روی AngularJS کار میکرد، ایجاد شد. هدف اصلی، برداشتن بهترین ویژگیهای Angular و ساخت چیزی سبکتر بود.
ساختار پایه Vue.js
یک پروژه Vue.js معمولاً از کامپوننتهای تک فایلی (SFC) تشکیل شده که شامل سه بخش template، script و style است.
<template>
<div class="component">
<h1>{{ title }}</h1>
<slot></slot>
</div>
</template>
<script>
export default {
name: 'MyComponent',
props: {
title: String
}
}
</script>
<style scoped>
.component {
margin: 20px;
padding: 20px;
}
</style>
کامپوننتها در Vue.js
کامپوننتها بلوکهای سازنده اصلی در برنامههای Vue.js هستند. هر کامپوننت میتواند منطق، ظاهر و حالت (state) خود را داشته باشد.
انواع کامپوننتها
// کامپوننت پایه
app.component('base-button', {
props: ['label'],
template: `
<button class="base-button">
{{ label }}
</button>
`
})
// کامپوننت پویا
const AsyncComponent = defineAsyncComponent(() =>
import('./components/AsyncComponent.vue')
)
ارتباط بین کامپوننتها
<template>
<div>
<child-component
:data="parentData"
@update="handleUpdate"
/>
</div>
</template>
<script>
export default {
data() {
return {
parentData: []
}
},
methods: {
handleUpdate(newValue) {
this.parentData = newValue
}
}
}
</script>
سیستم واکنشگرا در Vue.js
سیستم واکنشگرای Vue.js به طور خودکار تغییرات دادهها را ردیابی کرده و UI را بهروزرسانی میکند.
import { ref, reactive, computed } from 'vue'
// استفاده از ref برای مقادیر ساده
const count = ref(0)
// استفاده از reactive برای آبجکتها
const state = reactive({
users: [],
loading: false
})
// محاسبات واکنشگرا
const doubleCount = computed(() => count.value * 2)
// تغییر مقادیر
function increment() {
count.value++
state.loading = true
}
دستورات Vue.js
دستورات (Directives) در Vue.js دستورالعملهای ویژهای هستند که با پیشوند v- مشخص میشوند و رفتارهای خاصی به المانهای DOM اضافه میکنند.
<template>
<div>
<!-- نمایش شرطی -->
<p v-if="show">این متن نمایش داده میشود</p>
<!-- حلقه -->
<ul>
<li v-for="item in items" :key="item.id">
{{ item.name }}
</li>
</ul>
<!-- اتصال دوطرفه -->
<input v-model="message">
<!-- رویدادها -->
<button v-on:click="handleClick">کلیک کنید</button>
<!-- اتصال ویژگیها -->
<img v-bind:src="imageUrl" alt="تصویر">
</div>
</template>
مدیریت state در Vue.js
برای مدیریت state در Vue.js، گزینههای مختلفی وجود دارد. Pinia (جایگزین Vuex) راهحل رسمی برای مدیریت state در مقیاس بزرگ است.
// تعریف store
import { defineStore } from 'pinia'
export const useUserStore = defineStore('user', {
state: () => ({
name: '',
isAdmin: false,
preferences: {}
}),
getters: {
fullName: (state) => `${state.name} عزیز`,
},
actions: {
async fetchUserData() {
const data = await api.getUser()
this.name = data.name
this.isAdmin = data.isAdmin
}
}
})
// استفاده در کامپوننت
import { useUserStore } from '@/stores/user'
export default {
setup() {
const userStore = useUserStore()
return {
user: userStore
}
}
}
مسیریابی در Vue.js
Vue Router کتابخانه رسمی مسیریابی برای Vue.js است که امکان ایجاد برنامههای تکصفحهای (SPA) را فراهم میکند.
import { createRouter, createWebHistory } from 'vue-router'
const routes = [
{
path: '/',
name: 'Home',
component: () => import('@/views/Home.vue')
},
{
path: '/profile/:id',
name: 'Profile',
component: () => import('@/views/Profile.vue'),
meta: { requiresAuth: true }
}
]
const router = createRouter({
history: createWebHistory(),
routes
})
// محافظ مسیریابی
router.beforeEach((to, from, next) => {
if (to.meta.requiresAuth && !isAuthenticated()) {
next('/login')
} else {
next()
}
})
Composition API
Composition API روشی جدید برای نوشتن کامپوننتها در Vue 3 است که امکان سازماندهی بهتر کد و استفاده مجدد از منطق را فراهم میکند.
import { ref, onMounted, watch } from 'vue'
export default {
setup() {
const count = ref(0)
const doubleCount = computed(() => count.value * 2)
function increment() {
count.value++
}
watch(count, (newValue, oldValue) => {
console.log(`مقدار از ${oldValue} به ${newValue} تغییر کرد`)
})
onMounted(() => {
console.log('کامپوننت نصب شد')
})
return {
count,
doubleCount,
increment
}
}
}
اکوسیستم Vue.js
اکوسیستم Vue.js شامل مجموعهای از ابزارها و کتابخانههای رسمی و غیررسمی است که توسعه را آسانتر میکنند:
ابزارهای رسمی
- Vue CLI – ابزار خط فرمان برای ایجاد پروژه
- Vue Router – کتابخانه مسیریابی
- Pinia – مدیریت state
- Vite – ابزار ساخت مدرن
کتابخانههای محبوب
- VueUse – مجموعهای از composable utilities
- Nuxt.js – فریمورک جامع برای Vue.js
- Vuetify – کتابخانه UI با طراحی Material