Sales

فيو.جي إس: التواصل بين المكونات

Burak Kaşıkcı

Burak Kaşıkcı

بلس كلاودز أوثر

Vue.js: Communication Between Components

عند تطوير تطبيق باستخدام Vue.js، نقوم بفصل جميع الأجزاء إلى مكونات فردية، وبناء هيكل فوق ذلك. هذا لا يوفر لنا فقط هيكلًا أكثر تنظيمًا، بل يمنعنا أيضًا من كتابة نفس الكود عدة مرات أو إجراء نفس التعديلات في عشرات الأماكن عندما يكون هناك حاجة إلى تغيير.

بالطبع، هذا ليس خاصًا بـ Vue.js أو شيء مقترح هنا، وهناك مبدأ عام في البرمجيات يعرف باسم DRY (Don't Repeat Yourself) يتعلق بهذا الموضوع. هذا المبدأ هو أحد المبادئ الأساسية في البرمجيات ويدعو إلى تجنب تكرار الكود. (تم تسميته DRY وشرح بالتفصيل في كتاب "The Pragmatic Programmer").

من خلال الالتزام بهذا المبدأ والمنطق، نقوم بإنشاء مكونات في مشاريعنا، والتي تحتوي على بيانات ديناميكية، ونحتاج إلى تمرير هذه البيانات من المكونات الأم إلى المكونات الفرعية (من الأم إلى الفرعية)، من المكونات الفرعية إلى المكونات الأم (من الفرعية إلى الأم)، وبين المكونات ذات المستوى الأدنى (من الفرعية إلى الفرعية). دعونا نلقي نظرة على كيفية تنفيذ عمليات نقل البيانات هذه.

للاتصال بين الأم والفرعية: props

نستخدم بنية props عند نقل البيانات من المكون الأم إلى المكون الفرعي. يمكننا استخدام البيانات التي نرسلها عبر props في المكون الفرعي تمامًا مثل قيمة نعرفها داخل البيانات.

المكون الأم

 
// هنا، نقوم بتعيين قيمة ثابتة للعنوان.


// هنا، نرسل قيمة Title المعرفة في العنصر الخاص بالمكون الأم إلى قيمة العنوان المعرفة في المكون الفرعي.


يمكننا استخدامه كما يلي عند استلامه.

المكون الفرعي


للاتصال بين الفرعية والأم: $emit


لقد قمنا بنقل البيانات إلى الفرعية عبر props من الأم؛ هنا نحتاج إلى القيام بالعكس ودفع البيانات إلى الأعلى. لهذا، نستخدم بنية emit. إذا كنا بحاجة إلى تقديم مثال قصير، يمكننا استخدامه هكذا: this.$emit("result", item)
بالاستمرار من المثال أعلاه، سنحصل على النتيجة التالية؛

المكون الفرعي


لالتقاط هذه الإشارات في الأم، نستخدمها كـ @emitName أو v-on:emitName.
المكون الأم


للاتصال بين الفرعية والفرعية: event-bus


هنا، نظرًا لعدم وجود علاقة مباشرة مثل الأم والفرعية، نحتاج إلى استخدام وسيط، ونستخدم هنا instance eventbus. نقوم بإنشاء هذا الـ instance كـ Vue instance لا يرتبط بأي عنصر DOM، وسنستخدم هذا الـ instance فقط لنقل البيانات. يمكن لجميع المكونات إرسال الأحداث هنا، ويمكن لجميع المكونات التي تستمع هنا اتخاذ إجراء وفقًا للبيانات الواردة.

هنا، سنضيف أولاً instance eventBus إلى event-bus.js كما هو مذكور.

ثم سيكون كافيًا لنا استيراده في الصفحات التي سنستخدمها. لم نقم بتعريفه عالميًا، حيث سنستخدمه فقط بين مكونين.

في مثالنا الحالي، دعونا نقوم بتحديث العنوان في المكون A بالنقر على الزر في المكون B.

المكون الفرعي A

المكون الفرعي B

مع الطرق الثلاثة المذكورة أعلاه، يمكننا تنفيذ عمليات نقل البيانات بين المكونات.
#There is no text provided for translation. Please provide the text you would like to be translated into English.