✨ استفاده از متد
parent$
در لایووایر ۳
🤔 اکشنها در لایووایر چیست؟
در لایووایر (Livewire)، اکشنها به شما اجازه میدهند تا از طریق رویدادها (events) و دستورات (actions)، ارتباط موثری بین کامپوننتهای مختلف برقرار کنید. یکی از امکانات جدید و مفید در این زمینه استفاده از ویژگی
parent$
است که در نسخه ۳ لایووایر معرفی شده است.
متد
parent$
به شما این امکان را میدهد که از داخل یک کامپوننت فرزند، به متدها و خواص (properties) کامپوننت والد دسترسی پیدا کنید. این قابلیت زمانی مفید است که بخواهید از داخل فرزند، عملیاتی در والد اجرا کنید یا دادهای را به آن بفرستید بدون اینکه رویدادی ارسال کنید.
⚙️ متد
parent$
چطور کار میکند؟
زمانی که یک کامپوننت فرزند میخواهد مستقیماً به یک متد یا ویژگی در والد دسترسی پیدا کند، به جای استفاده از رویدادها (dispatching events)، میتوانید از
parent$
استفاده کنید. در واقع
parent$
مستقیماً از درون الگوهای Blade استفاده میشود.
مثال:
فرض کنید کامپوننت والد متدی به نام
()removePost
دارد. شما میتوانید از داخل کامپوننت فرزند این متد را فراخوانی کنید:
<button wire:click="$parent.removePost({{ $post->id }})">Remove</button>
در این مثال، کامپوننت فرزند از طریق
parent$
متد
()removePost
را در کامپوننت والد فراخوانی میکند و
id
پست را به آن ارسال میکند. این کار ساده و مستقیم است و به شما اجازه میدهد ارتباط مؤثری بین فرزند و والد برقرار کنید بدون نیاز به سیستم پیچیده رویدادها.
🕰 کی از
parent$
استفاده کنیم؟
- ارتباط مستقیم بین فرزند و والد: وقتی که نیاز دارید بهراحتی از فرزند به متدها و خواص والد دسترسی پیدا کنید.
- پیچیدگی کم: در سیستمهای ساده که استفاده از رویدادها باعث پیچیدگی بیمورد میشود.
- تعداد کم کامپوننتها: زمانی که تعداد کمی کامپوننت دارید و ارتباط بین آنها مستقیم است.
⛔️ زمانی که نباید از
parent$
استفاده کنید:
- سیستمهای پیچیده: وقتی تعداد زیادی کامپوننت دارید و استفاده بیش از حد از
parent$
باعث وابستگی شدید بین کامپوننتها میشود.
- ارتباطات غیرمستقیم: وقتی نیاز است دادهها بین کامپوننتهای متعدد و پیچیده جابهجا شوند، بهتر است از رویدادها (dispatching events) استفاده کنید.
🎯 رویدادها (Dispatching Events) چیست؟
در لایووایر، رویدادها به شما این امکان را میدهند که بدون وابستگی مستقیم، اطلاعات بین کامپوننتها را جابهجا کنید. در این روش، یک کامپوننت میتواند رویدادی ارسال کند و کامپوننتهای دیگر به آن گوش دهند.
مزایای استفاده از رویدادها:
1️⃣ استقلال کامپوننتها: هر کامپوننت میتواند به طور مستقل عمل کند.
2️⃣ قابلیت توسعه بالا: برای پروژههای بزرگتر مناسبتر است.
3️⃣ ارتباطات چندطرفه: رویدادها میتوانند به صورت چندگانه مدیریت شوند، یعنی یک رویداد میتواند توسط چندین کامپوننت شنیده شود.
مثال از رویدادها:
$this->dispatch('eventName', ['data' => $someData]);
و در والد:
use Livewire\Attributes\On;
#[On('eventName')]
public function handleEvent($data)
{
// کاری که باید انجام شود
}
⚖️ تفاوت
parent$
و رویدادها (Dispatching Events)
parent$
- ارتباط مستقیم بین فرزند و والد.
- سریع و ساده برای سیستمهای کوچک.
- وابستگی زیاد بین کامپوننتها.
- مناسب برای سیستمهای ساده و ارتباطات کمپیچیدگی.
Dispatching Events
- ارتباط غیرمستقیم بین کامپوننتها.
- کاهش وابستگی بین آنها.
- مناسب برای سیستمهای پیچیده و بزرگ.
- مدیریت بهتر در پروژههای چندلایه و پیچیده.
⚜️در نهایت، انتخاب بین استفاده از
parent$
و رویدادها (Dispatching Events) بستگی به نیاز پروژه دارد. برای ارتباطات ساده و مستقیم،
parent$
مناسبتر است؛ اما برای پروژههای پیچیده و بزرگ، رویدادها استقلال بیشتری بین کامپوننتها فراهم میکنند و مدیریت بهتر را ممکن میسازند.
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامهنویسی
📌 @PapiDon_coding