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

پرسش و پاسخ

نظری یافت نشد

مطالب مشابه

آموزش ساخت اولین فایل PHP و بررسی ساختار تگ‌ها بر اساس استاندارد وب
1405/03/15 00:08

آموزش ساخت اولین فایل PHP و بررسی ساختار تگ‌ها بر اساس استاندارد وب

مطالعه بیشتر
آموزش موقعیت‌بندی المان‌ها با استفاده از position در CSS: نحوه استفاده از absolute، relative و fixed
1402/06/05 23:43

آموزش موقعیت‌بندی المان‌ها با استفاده از position در CSS: نحوه استفاده از absolute، relative و fixed

مطالعه بیشتر
آشنایی با Vue CLI و ایجاد پروژه‌های پیشرفته در Vue.js | راهنمای کامل
1404/09/29 21:09

آشنایی با Vue CLI و ایجاد پروژه‌های پیشرفته در Vue.js | راهنمای کامل

مطالعه بیشتر
استفاده از calc در CSS: محاسبات پویا برای طراحی‌های منعطف
1403/08/12 19:43

استفاده از calc در CSS: محاسبات پویا برای طراحی‌های منعطف

مطالعه بیشتر
آموزش اصول کار با WebSockets و ارتباطات بلادرنگ در وب: راهنمای کامل
1403/08/05 20:55

آموزش اصول کار با WebSockets و ارتباطات بلادرنگ در وب: راهنمای کامل

مطالعه بیشتر
تفاوت include، require، include_once و require_once در PHP
1405/05/01 20:32

تفاوت include، require، include_once و require_once در PHP

مطالعه بیشتر
آموزش ساخت ماشین حساب با جاوا اسکریپت: راهنمای کامل با مثال‌های کاربردی
1403/08/04 18:52

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

مطالعه بیشتر
آموزش جامع ساخت فرم ورود کاربر در PHP (براساس استانداردهای گوگل و امنیت بالا)
1405/05/14 22:03

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

مطالعه بیشتر
آموزش کامل کار با اعداد و توابع ریاضی در PHP (کامل و کاربردی)
1405/04/27 21:51

آموزش کامل کار با اعداد و توابع ریاضی در PHP (کامل و کاربردی)

مطالعه بیشتر
کار با border و تنظیمات آن در CSS: مدیریت زوایای گرد با border-radius
1403/08/09 20:16

کار با border و تنظیمات آن در CSS: مدیریت زوایای گرد با border-radius

مطالعه بیشتر
استفاده از setTimeout و setInterval در جاوا اسکریپت: آموزش کامل و مثال‌ها
1403/07/29 20:46

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

مطالعه بیشتر
آموزش گام به گام ساخت سیستم لاگین و لاگ‌اوت در PHP به صورت ایمن
1405/05/14 22:13

آموزش گام به گام ساخت سیستم لاگین و لاگ‌اوت در PHP به صورت ایمن

مطالعه بیشتر

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