إتقان Vue.js: شرح الإطار JavaScript الحديث
٢٤ نوفمبر ٢٠٢٥
باختصار
- Vue.js هو إطار عمل تقدمي JavaScript لبناء واجهات ويب تفاعلية قائمة على المكونات.
- إنه سهل الاستخدام للمبتدئين وقوي بما يكفي للتطبيقات على نطاق المؤسسة.
- يغطي هذا الدليل الإعداد، والهندسة المعمارية، والأداء، والاختبار، والنشر.
- ستتعلم كيفية بناء تطبيق Vue كامل وتجنب الأخطاء الشائعة.
- سنستكشف متى يكون Vue هو الاختيار الصحيح — ومتى لا يكون.
ما ستتعلمه
- كيف يعمل Vue.js خلف الكواليس — التفاعلية، والقوالب، ودورة حياة المكون.
- كيفية بناء تطبيق Vue صغير لكنه جاهز للإنتاج.
- كيف يقارن Vue مع React و Angular.
- تحسين الأداء وأفضل ممارسات الأمان لتطبيقات Vue.
- استراتيجيات الاختبار، ومعالجة الأخطاء، والمراقبة.
المتطلبات الأساسية
- فهم أساسي لـ JavaScript (ES6).
- معرفة بـ HTML و CSS.
- تثبيت Node.js و npm على جهازك.
إذا كنت جديدًا على JavaScript الحديث، تحقق من [دليل MDN لـ JavaScript]1 قبل البدء.
مقدمة: لماذا Vue.js؟
Vue.js، الذي تم إنشاؤه بواسطة Evan You في عام 2014، تم تصميمه لدمج أفضل ميزات Angular و React — قوالب إLBLA لـ Angular وتدفق البيانات التفاعلي لـ React2. إنه الآن أحد أكثر إطارات العمل الأمامية شيوعًا، ويدعم كل شيء من لوحات المعلومات الصغيرة إلى التطبيقات المعقدة على نطاق المؤسسة.
يُوصف Vue غالبًا بأنه تقدمي لأنه يمكن اعتماده تدريجيًا. ابدأ بإضافة Vue إلى صفحة واحدة، ثم قم بالتوسع إلى تطبيق صفحة واحدة كامل (SPA) باستخدام Vue Router و Vuex (أو مكتبة الحالة الجديدة Pinia).
وفقًا لمسح [State of JS 2023]3، يحتل Vue باستمرار مكانًا بين أفضل الإطارات من حيث رضا المطورين وسهولة التعلم.
هندسة Vue.js
في جوهره، يدور Vue حول ثلاث أفكار رئيسية:
- العرض الإLBLA – تُصف ما يجب أن تبدو عليه واجهة المستخدم، ويقوم Vue بمعالجة كيف.
- نظام التفاعلية – يتتبع Vue التبعيات بحيث يتم تحديث الـ DOM تلقائيًا عند تغيير البيانات.
- الهندسة المعمارية القائمة على المكونات – تبني وحدات واجهة مستخدم قابلة لإعادة الاستخدام ومُحصَّنة.
هنا نموذج بسيط للتفكير:
graph TD
A[User Input] --> B[Reactive Data]
B --> C[Virtual DOM]
C --> D[Rendered View]
D -->|Event| A
هذه الحلقة التفاعلية هي ما يجعل Vue بديهية وقوية.
بدء سريع: التشغيل في 5 دقائق
لننشئ مشروع Vue 3 جديد باستخدام واجهة سطر الأوامر الرسمية.
1. تثبيت Vue CLI
npm install -g @vue/cli
2. إنشاء مشروع
vue create my-vue-app
اختر الإعداد الافتراضي (Vue 3 + Babel + ESLint).
3. تشغيل خادم التطوير
cd my-vue-app
npm run serve
سترى:
App running at:
- Local: http://localhost:8080/
الآن افتح الرابط وسترى تطبيق Vue الأول.
بنية مكون Vue
يتم تعريف مكون Vue عادةً في صيغة Single File Component (SFC) باستخدام الامتداد .vue.
<!-- HelloWorld.vue -->
<template>
<div class="greeting">
<h1>{{ message }}</h1>
<button @click="changeMessage">Change Message</button>
</div>
</template>
<script>
export default {
name: 'HelloWorld',
data() {
return {
message: 'Hello, Vue!'
}
},
methods: {
changeMessage() {
this.message = 'You clicked the button!';
}
}
}
</script>
<style scoped>
.greeting {
text-align: center;
}
</style>
المفاهيم الرئيسية
- القالب: يُعرِّف هيكل HTML.
- السكريبت: يحتوي على المنطق والبيانات.
- الستايل: يضمن CSS مُحدَّد أن الأنماط تنطبق فقط على هذا المكون.
Vue vs React vs Angular
| الميزة | Vue.js | React | Angular |
|---|---|---|---|
| النوع | إطار عمل | مكتبة | إطار عمل |
| منحنى التعلم | سهل | متوسط | حاد |
| القوالب | قائم على HTML | JSX | HTML + TypeScript |
| إدارة الحالة | Vuex / Pinia | Redux / Context | RxJS / NgRx |
| الحجم (الأساسي) | ~33KB | ~42KB | ~143KB |
| TypeScript Support | ممتاز | ممتاز | مدمج |
| حالة الاستخدام | تطبيقات الويب أحادية الصفحة، لوحات التحكم، النماذج الأولية | تطبيقات كبيرة الحجم | تطبيقات المؤسسات |
Vue تُوازن بين البساطة والقدرة. إنها أقل تحيزًا من Angular وأكثر تنظيمًا من React، مما يجعلها حلًا وسطًا ممتازًا.
بناء أول تطبيق Vue
لننشئ Task Tracker بسيطًا لفهم تفاعلية Vue وهيكليتها المكونية.
الخطوة 1: إعداد هيكلية المكونات
src/
components/
TaskList.vue
TaskItem.vue
App.vue
main.js
الخطوة 2: TaskList.vue
<template>
<div>
<h2>Tasks</h2>
<input v-model="newTask" @keyup.enter="addTask" placeholder="Add a task" />
<ul>
<TaskItem v-for="task in tasks" :key="task.id" :task="task" @remove="removeTask"/>
</ul>
</div>
</template>
<script>
import TaskItem from './TaskItem.vue'
export default {
components: { TaskItem },
data() {
return {
newTask: '',
tasks: []
}
},
methods: {
addTask() {
if (!this.newTask.trim()) return;
this.tasks.push({ id: Date.now(), text: this.newTask });
this.newTask = '';
},
removeTask(id) {
this.tasks = this.tasks.filter(t => t.id !== id);
}
}
}
</script>
الخطوة 3: TaskItem.vue
<template>
<li>
{{ task.text }}
<button @click="$emit('remove', task.id)">x</button>
</li>
</template>
<script>
export default {
props: ['task']
}
</script>
لديك الآن مُتتبع مهام تفاعلي — لا حاجة لتحديثات DOM يدوية.
متى تستخدم Vue.js ومتى لا تستخدمها
| متى تستخدم Vue.js | متى لا تستخدم Vue.js |
|---|---|
| تحتاج واجهة تفاعلية بدون كمية كبيرة من الشفرة النمطية | تقوم ببناء موقع ثابت مع تفاعلية محدودة |
| تريد بناء نموذج أولي سريع وهيكل قابل للصيانة | فريقك مُستثمر بالفعل بشكل كبير في React أو Angular |
| تحتاج إلى تكامل سلس مع التطبيقات الحالية | تحتاج إلى عرض من جانب الخادم مع توجيه معقد (فكر في Nuxt.js) |
| تقدر الفصل الواضح بين القالب والمنطق والنمط | تتطلب تطبيقًا صارمًا للهندسة المعمارية (Angular أنسب) |
المزالق الشائعة والحلول
1. تعديل الخصائص مباشرة
المشكلة:
props: ['user']
this.user.name = 'John'; // ❌
الحل: استخدم خاصية محسوبة أو أرسل حدثًا لتحديث حالة الوالد.
this.$emit('update:user', { ...this.user, name: 'John' });
2. نسيان key في v-for
بدون مفتاح فريد، قد يقوم Vue بإعادة استخدام عناصر DOM بشكل غير صحيح.
الإصلاح:
<li v-for="item in items" :key="item.id">{{ item.name }}</li>
3. عدم استخدام v-model بشكل صحيح
تأكد من إعلان الربط الثنائي بشكل صحيح:
<input v-model="form.email" />
تحسين الأداء
Virtual DOM الخاص بـ Vue سريع، لكن التحسين مهم للتطبيقات الكبيرة.
التقنيات:
-
التحميل الكسول للمكونات
const UserProfile = () => import('./UserProfile.vue'); -
استخدام
v-onceللمحتوى الثابت<h1 v-once>Static Header</h1> -
التخزين المؤقت مع الخصائص المحسوبة الخصائص المحسوبة تخزن النتائج حتى تتغير التبعيات.
-
تجنب المراقبين غير الضروريين استخدم الخصائص المحسوبة بدلاً من المراقبين كلما أمكن.
اعتبارات الأمان
Vue تقوم تلقائيًا بتهريب HTML في القوالب لمنع XSS4. ومع ذلك، يجب على المطورين البقاء يقظين:
- تجنب
v-htmlمع مدخلات غير موثوقة. - استخدم رؤوس سياسة أمان المحتوى (CSP).
- قم بتطهير مدخلات المستخدم على الخادم.
- اتبع إرشادات OWASP لأمان الواجهة الأمامية5.
اختبار تطبيقات Vue
تدعم Vue استراتيجيات اختبار متعددة:
اختبار الوحدات
استخدم [Vue Test Utils]6 مع Jest أو Vitest.
npm install --save-dev @vue/test-utils jest
import { mount } from '@vue/test-utils'
import TaskList from '@/components/TaskList.vue'
test('adds a new task', async () => {
const wrapper = mount(TaskList)
await wrapper.setData({ newTask: 'Write tests' })
await wrapper.find('input').trigger('keyup.enter')
expect(wrapper.text()).toContain('Write tests')
})
اختبار النهاية إلى النهاية
استخدم Cypress أو Playwright لأتمتة المتصفح بالكامل.
أنماط معالجة الأخطاء
-
استخدم حدود الأخطاء (هوك
errorCapturedفي Vue 3):errorCaptured(err, vm, info) { console.error('Error:', err, info); return false; // prevent further propagation } -
قم بتنفيذ معالجة أخطاء عالمية في
main.js:app.config.errorHandler = (err, vm, info) => { console.error('Global Error:', err); };
المراقبة والقابلية للرصد
في الإنتاج، استخدم:
- Vue Devtools للتصحيح.
- Sentry أو LogRocket لتتبع الأخطاء.
- واجهات برمجة الأداء (
window.performance) للمقاييس المخصصة.
مثال لتسجيل المقاييس:
Alibaba Tech Blog – Vue في الإنتاج: https://developer.aliyun.com/article/763129 ↩
GitLab Engineering Blog – تبني Vue: https://about.gitlab.com/blog/tags/vuejs/ ↩
مقاييس أداء Vue.js (الرسمي): https://vuejs.org/guide/extras/performance.html ↩