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

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

1404/09/28 21:41 محراب حسن زاده
آموزش 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 را هم باید درست و حسابی بلد باشی و اگر بلد نباشی، پروژه‌ات خیلی زود خودش را لو می‌دهد.

پرسش و پاسخ

نظری یافت نشد

مطالب مشابه

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

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

مطالعه بیشتر
آموزش CSS Blend Modes: ادغام رنگ‌ها و تصاویر برای طراحی وب جذاب
1403/08/09 20:29

آموزش CSS Blend Modes: ادغام رنگ‌ها و تصاویر برای طراحی وب جذاب

مطالعه بیشتر
آموزش کار با Local Storage و Session Storage در جاوا اسکریپت: ذخیره‌سازی داده‌ها در مرورگر
1403/08/03 17:08

آموزش کار با Local Storage و Session Storage در جاوا اسکریپت: ذخیره‌سازی داده‌ها در مرورگر

مطالعه بیشتر
تفاوت Callbacks و Promises در جاوا اسکریپت: مقایسه جامع با مثال‌ها
1403/07/30 21:53

تفاوت Callbacks و Promises در جاوا اسکریپت: مقایسه جامع با مثال‌ها

مطالعه بیشتر
آموزش کامل و اصولی اتصال PHP به پایگاه داده MySQL (به روش PDO و MySQLi)
1405/05/04 23:34

آموزش کامل و اصولی اتصال PHP به پایگاه داده MySQL (به روش PDO و MySQLi)

مطالعه بیشتر
معرفی MySQL و phpMyAdmin: راهنمای جامع مدیریت پایگاه داده برای توسعه‌دهندگان وب
1405/05/04 23:32

معرفی MySQL و phpMyAdmin: راهنمای جامع مدیریت پایگاه داده برای توسعه‌دهندگان وب

مطالعه بیشتر
آموزش ساخت دیتابیس و جدول برای پروژه PHP طبق استاندارد گوگل
1405/05/04 23:38

آموزش ساخت دیتابیس و جدول برای پروژه PHP طبق استاندارد گوگل

مطالعه بیشتر
آموزش جامع کار با فرم‌ها در PHP (امنیت و اعتبارسنجی طبق استاندارد گوگل)
1405/04/27 22:01

آموزش جامع کار با فرم‌ها در PHP (امنیت و اعتبارسنجی طبق استاندارد گوگل)

مطالعه بیشتر
استفاده از Viewports و Viewport Units در CSS: طراحی واکنش‌گرا با vw، vh، vmin و vmax
1403/08/16 22:30

استفاده از Viewports و Viewport Units در CSS: طراحی واکنش‌گرا با vw، vh، vmin و vmax

مطالعه بیشتر
آموزش mix-blend-mode و background-blend-mode در CSS: ترکیب رنگ‌ها و ایجاد افکت‌های جذاب
1403/08/12 20:18

آموزش mix-blend-mode و background-blend-mode در CSS: ترکیب رنگ‌ها و ایجاد افکت‌های جذاب

مطالعه بیشتر
آموزش جامع تعریف تابع سفارشی در PHP طبق استاندارد گوگل و PSR
1405/04/16 01:07

آموزش جامع تعریف تابع سفارشی در PHP طبق استاندارد گوگل و PSR

مطالعه بیشتر
آموزش کامل دستور switch-case در PHP (به همراه مثال‌های کاربردی)
1405/04/04 00:08

آموزش کامل دستور switch-case در PHP (به همراه مثال‌های کاربردی)

مطالعه بیشتر

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