OOZOU
تواصلوا معنا
العودة إلى المدونة

بنية Flux بسيطة باستخدام Vue.js

استخدام EventBus في Vue.js لبناء بنية Flux بسيطة.

12 ديسمبر 2018
دقيقتان للقراءة
بنية Flux بسيطة باستخدام Vue.js

في التطبيقات الصغيرة التي لا تحتاج إلا إلى نمط بسيط لإدارة الحالة (state management)، أستخدم دائمًا مكوّنًا واحدًا يحتفظ بحالة التطبيق، وهو ما نسميه container. يعمل هذا المكوّن كمصدر وحيد للحقيقة (single source of truth) يرجع إليه التطبيق لمعرفة حالته. ويوفّر Vue آلية لإنشاء event listener عام يُسمى EventBus، وهي طريقة بسيطة جدًا لمحاكاة بنية Flux.

كل ما تحتاجون إليه هو module واحد يصدّر نسخة من Vue باسم EventBus، هكذا:

import Vue from 'vue'
export const EventBus = new Vue()
lang-javascript

بعد ذلك يمكنكم استخدامه داخل الـ container للاستماع إلى الأحداث القادمة من أي مكوّن في التطبيق. عادةً أضيف الـ listener في مرحلة created من دورة الحياة.

/*
In this scenario you could just use `vm.$emit` to communicate to `Container` from `CustomButton.
In reality, this pattern will shine when your component is nested inside some more components and
you can't really emit event to the `Container` quite easily.
*/
<template>
<custom-button label='Click me and the I will update the container state' />
</template>

<script>
import { EventBus } from "./EventBus.js"
import CustomButton from "./CustomButton.vue"
export default {
 data () {
  return { buttonClickCount: 0 }
 },
 created () {
  EventBus.$on('my-custom-event', (params) => {
   // you can submit data via params when emitting event.
   console.log(params) 
   this.buttonClickCount++ 
   }
 },
 components: {
  'custom-button': CustomButton
 }
}
</script>
lang-vue

الآن يمكنكم استيراد EventBus في أي مكوّن، وإطلاق الحدث my-custom-event من أي مكان، دون الحاجة إلى إرسال الحدث إلى المكوّن الأب ثم تكرار العملية نفسها في كل مكوّن يقع بين المكوّن الذي يطلق التغيير والـ container المستهدف.

إليكم الشكل الذي قد يبدو عليه CustomButton:

<template>
<button @click='increaseUpdateCount'>{{label}}</button>
</template>
<script>
import { EventBus } from './EventBus.js'
export default {
 props: ['label'],
 methods: {
   increaseUpdateCount () {
    EventBus.$emit('my-custom-event', 'hello')
   }
  }
}
</script>
lang-vue

هذا كل شيء. ومع نمو تطبيقكم، قد يكون من الأفضل التفكير في استخدام Vuex، خاصة إذا كانت عدة containers تتشارك بعض الحالات.

مع أطيب التحيات!

Related Articles

كيف أصمّم برمجيات؟ دليل المبتدئين لأصحاب الأعمال

كيف أصمّم برمجيات؟ دليل المبتدئين لأصحاب الأعمال

تصميم البرمجيات عملية ممتعة لكنها معقدة، تتطلب الإبداع والتفكير المنطقي ومهارات حل المشكلات.

اقرأوا المزيد
مستقبل الحوسبة الطرفية: ما تحتاج الشركات إلى معرفته

مستقبل الحوسبة الطرفية: ما تحتاج الشركات إلى معرفته

يتطور المشهد الرقمي بسرعة، وعلى الشركات أن تتكيّف لتواكب الطلب المتزايد على السرعة والكفاءة والمعالجة في الوقت الفعلي.

اقرأوا المزيد
مستقبل قطاع التجزئة: الذكاء الاصطناعي والواقع المعزّز واتجاهات التحوّل الرقمي

مستقبل قطاع التجزئة: الذكاء الاصطناعي والواقع المعزّز واتجاهات التحوّل الرقمي

يتطور قطاع التجزئة بوتيرة غير مسبوقة بفضل الذكاء الاصطناعي (AI) والواقع المعزّز (AR) وتقنيات التحوّل الرقمي. فلم تعد المتاجر التقليدية مجرد أماكن لبيع المنتجات، بل أصبحت متاجر ذكية وتفاعلية.

اقرأوا المزيد

Have a Project in Mind?

Let's discuss how we can help bring your ideas to life with our expertise in web and mobile development.

ابدأوا المحادثةhello@oozou.com
OOZOU Logo

بانكوك · سنغافورة · هونغ كونغ

X
Facebook
Instagram
LinkedIn
OOZOU Co., Ltd.
548 One City Centre
Ploenchit Road
Bangkok 10330
Thailand
+66 2544 0000
hello@oozou.com

الخدمات

  • تطوير الويب
  • وكلاء الذكاء الاصطناعي والذكاء الاصطناعي التوليدي
  • تطوير تطبيقات الجوال
  • تحليلات البيانات وهندستها
  • تصميم تجربة المستخدم وواجهته (UX/UI) وتصميم المنتجات
  • التحوّل الرقمي

الشركة

  • من نحن
  • الوظائف
  • المدونة
  • دراسات الحالة
  • عروض حية
  • تعلّمت اليوم
  • تواصل معنا

المزيد

  • القطاعات
  • شبكة الشركاء
© 2026 OOZOU. جميع الحقوق محفوظة.
سياسة الخصوصيةمدونة قواعد السلوكسياسة مكافحة الرشوة والفساد