آموزش رایگان Vue.js

آموزش Emit در Vue.js | انتقال رویداد از کامپوننت فرزند به والد

28م آذر 1404 محراب حسن زاده
آموزش Emit در Vue.js | انتقال رویداد از کامپوننت فرزند به والد

در Vue.js، کامپوننت‌ها قرار نیست ذهن‌خوان باشند. هر کدام وظیفه خودش را دارد و اگر قرار است با هم حرف بزنند، باید راه درستش را بلد باشند. یکی از مهم‌ترین این راه‌ها emit و انتقال رویداد از کامپوننت فرزند به والد است.

اگر این بخش را درست نفهمی، دیر یا زود پروژه‌ات تبدیل می‌شود به مجموعه‌ای از کامپوننت‌های عصبی که هیچ‌کدام نمی‌دانند دیگری چه می‌کند.


Emit در Vue.js چیست؟

emit مکانیزمی است برای ارسال رویداد از کامپوننت فرزند (Child) به کامپوننت والد (Parent).

  • فرزند یک اتفاق را اعلام می‌کند

  • والد تصمیم می‌گیرد با آن اتفاق چه کار کند

یعنی:

  • فرزند حرف می‌زند، والد تصمیم می‌گیرد.


چرا به Emit نیاز داریم؟

در Vue:

  • Props → انتقال داده از والد به فرزند

  • Emit → انتقال رویداد از فرزند به والد

اگر بخواهی:

  • کلیک یک دکمه در فرزند

  • ارسال فرم

  • تغییر وضعیت داخلی کامپوننت

را به والد اعلام کنی، تنها راه تمیز و استاندارد همین emit است.


ساخت یک Emit ساده (مثال پایه)

کامپوننت فرزند




< template >
  < button @click = " sendEvent " >
    ارسال به والد
  < / button >
< / template >




export default {
  methods : {
    sendEvent ( ) {
      this.$emit ( ' custom-event ' )
    }
  }
}


در اینجا:

  • custom-event نام رویداد است

  • هیچ منطقی در فرزند اجرا نمی‌شود

  • فقط اعلام می‌کند که یک اتفاق افتاده


کامپوننت والد




< template >
  < ChildComponent @custom-event = " handleEvent " / >
< / template >




import ChildComponent from ' ./ChildComponent.vue '

export default {
  components : { ChildComponent } ,
  methods : {
    handleEvent ( ) {
      console.log ( ' رویداد از فرزند دریافت شد ' )
    }
  }
}


والد:

  • به رویداد گوش می‌دهد

  • واکنش مناسب را انجام می‌دهد


ارسال داده همراه Emit

Emit فقط برای اعلام نیست، می‌تواند داده هم ارسال کند.

فرزند




this.$emit('submit-form', this.formData)


والد




< ChildComponent @submit-form = " handleSubmit " / >




methods : {
  handleSubmit ( data ) {
    console.log ( data )
  }
}


اینجا:

  • فرزند داده را ارسال می‌کند

  • والد مسئول پردازش آن است

و این دقیقاً همان جداسازی مسئولیت‌هاست که Vue به آن اصرار دارد.


تعریف Emit به صورت استاندارد (Vue 3)

در Vue 3 بهتر است رویدادها را شفاف تعریف کنی تا بعداً خودت هم سردرگم نشوی.




defineEmits ( [ ' submit-form ' ] )


یا در حالت معمول:




export default {
  emits : [ ' submit-form ' ]
}


این کار:

  • خوانایی را بالا می‌برد

  • خطاهای ناخواسته را کم می‌کند

  • پروژه را حرفه‌ای‌تر نشان می‌دهد


تفاوت Emit با Callback یا Event Bus


روش

وضعیت

Emit

استاندارد، امن، توصیه‌شده

Callback

قابل استفاده ولی شلوغ

Event Bus

منسوخ و دردسرساز

Store (Pinia/Vuex)

برای stateهای سراسری


اگر ارتباط فقط بین والد و فرزند است، Emit بهترین انتخاب است. استفاده از Store برای این کار، افراط محسوب می‌شود.


اشتباهات رایج در استفاده از Emit

  • تغییر مستقیم state والد در فرزند

  • استفاده از اسم‌های مبهم مثل clickEvent

  • ارسال منطق به جای رویداد

  • استفاده بیش از حد از emit به جای state management


Emit باید ساده، شفاف و محدود باشد.


جمع‌بندی

  • Emit راه استاندارد ارتباط فرزند به والد در Vue.js است

  • فرزند فقط رویداد ارسال می‌کند، نه تصمیم

  • والد مسئول منطق و واکنش است

  • استفاده درست از emit باعث کد تمیز، قابل نگهداری و حرفه‌ای می‌شود


اگر Vue را جدی می‌گیری، emit را هم باید درست و حسابی بلد باشی و اگر بلد نباشی، پروژه‌ات خیلی زود خودش را لو می‌دهد.

پرسش و پاسخ

نظری یافت نشد

مطالب مشابه

استفاده از visibility و opacity در CSS برای مخفی‌سازی عناصر: راهنمای کامل و کاربردی
11م آبان 1403

استفاده از visibility و opacity در CSS برای مخفی‌سازی عناصر: راهنمای کامل و کاربردی

مطالعه بیشتر
مفاهیم پیشرفته در کلاس‌ها و وراثت (Super, Extends) در جاوا اسکریپت: راهنمای کامل و مثال‌ها
29م مهر 1403

مفاهیم پیشرفته در کلاس‌ها و وراثت (Super, Extends) در جاوا اسکریپت: راهنمای کامل و مثال‌ها

مطالعه بیشتر
مفاهیم Promise و چگونگی استفاده از آن در جاوا اسکریپت: راهنمای کامل همراه با مثال‌ها
30م مهر 1403

مفاهیم Promise و چگونگی استفاده از آن در جاوا اسکریپت: راهنمای کامل همراه با مثال‌ها

مطالعه بیشتر
پیمایش اشیاء و آرایه‌ها در جاوا اسکریپت: راهنمای کامل برای Object.keys، Object.values، for...in و for...of
4م مهر 1403

پیمایش اشیاء و آرایه‌ها در جاوا اسکریپت: راهنمای کامل برای Object.keys، Object.values، for...in و for...of

مطالعه بیشتر
آموزش تغییر المان‌های DOM: ویرایش متن، سبک‌ها و کلاس‌ها در جاوا اسکریپت - راهنمای کامل با مثال‌ها
2م آبان 1403

آموزش تغییر المان‌های DOM: ویرایش متن، سبک‌ها و کلاس‌ها در جاوا اسکریپت - راهنمای کامل با مثال‌ها

مطالعه بیشتر
تنظیم عرض و ارتفاع عناصر در CSS: استفاده از width، height، max و min برای کنترل دقیق اندازه‌ها
9م آبان 1403

تنظیم عرض و ارتفاع عناصر در CSS: استفاده از width، height، max و min برای کنترل دقیق اندازه‌ها

مطالعه بیشتر
آموزش استفاده از object-fit و object-position در CSS: تنظیم و قرارگیری تصاویر به‌صورت دقیق
12م آبان 1403

آموزش استفاده از object-fit و object-position در CSS: تنظیم و قرارگیری تصاویر به‌صورت دقیق

مطالعه بیشتر
آموزش کامل کار با آرایه‌ها و اشیاء در جاوا اسکریپت: ایجاد، دستکاری و پیمایش
2م شهریور 1403

آموزش کامل کار با آرایه‌ها و اشیاء در جاوا اسکریپت: ایجاد، دستکاری و پیمایش

مطالعه بیشتر
استفاده از display در CSS: تغییر نحوه نمایش عناصر - راهنمای جامع
9م آبان 1403

استفاده از display در CSS: تغییر نحوه نمایش عناصر - راهنمای جامع

مطالعه بیشتر
درک و استفاده از Watchers در Vue.js | آموزش Watch با مثال کاربردی
28م آذر 1404

درک و استفاده از Watchers در Vue.js | آموزش Watch با مثال کاربردی

مطالعه بیشتر
آموزش ایجاد تگ‌های صفحه‌بندی در HTML و CSS: طراحی و استایل‌دهی pagination
29م مرداد 1402

آموزش ایجاد تگ‌های صفحه‌بندی در HTML و CSS: طراحی و استایل‌دهی pagination

مطالعه بیشتر
آموزش دسترسی به المان‌های HTML با استفاده از جاوا اسکریپت: راهنمای کامل با مثال‌ها
2م آبان 1403

آموزش دسترسی به المان‌های HTML با استفاده از جاوا اسکریپت: راهنمای کامل با مثال‌ها

مطالعه بیشتر

تمامی حقوق معتلق به ناشر سایت است و کپی از آن پیگرد قانونی دارد