Компонент Laravel Livewire не обновляется / не перезагружается автоматически после его обновления
Итак, сейчас я использую Laravel Livewire в одном из своих проектов. Но когда я пытаюсь передать событие от одного компонента к другому с помощью волшебного метода$refresh
, его обновление (получено dom в запросе xhr) всего компонента, но интерфейс не обновляется в реальном времени.
Компонент ProductReviewForm.php
public function save()
{
//some functionalities ....
$this->emit('reviewSectionRefresh');
}
Компонент ProductReviewSection.php
protected $listeners = [
'reviewSectionRefresh' => '$refresh',
];
public function render()
{
$this->review_lists = ProductReview::orderBy('id', 'DESC')->get();
return view('livewire.desktop.product-review-section');
}
Итак, я хочу выпустить reviewSectionRefresh
событие, которое будет испускаться всякий раз, когда я звоню save()
функция из первого компонента, которую должен прослушивать $listeners
от другого компонента. Это нормально работает. также в xhr я получаю обновленную dom, но компонент во внешнем интерфейсе не обновляется. Надеюсь, что любой, кто работает с Livewire, может в этом помочь.
2 ответа
Похоже, я неправильно написал представление о лезвии компонента.
все элементы обновленного компонента должны быть заключены в один элемент div, например:
<div>
{{-- Anything you want to do --}}
</div>
раньше у меня пилка была вроде. Что не так
<div class="">
{{ -- some dom elements -- }}
</div>
<div class="">
{{ -- some other dom elements -- }}
</div>
но так должно быть.
<div>
<div class="">
{{ -- some dom elements -- }}
</div>
<div class="">
{{ -- some other dom elements -- }}
</div>
</div>
Итак, что бы вы ни писали, это должно быть внутри ОДНОГО РОДИТЕЛЬСКОГО РАЗДЕЛА.
Мне интересно. У меня есть единственный элемент в верхней части моего компонента livewire. Я тоже вижу, что событие генерируется. и мой интерфейс не обновляется.
Должен ли единственный корневой элемент не содержать каких-либо классов и т. Д.? Мой единственный корневой элемент гласит:
<div class="mt-10 sm:mt-0">
Должен ли это быть только div без атрибутов?
<div>
Actually I tried this and it did not make a difference.
The front end is still not refreshing. Unless I refresh
the entire page.
Я выдаю это из родственного компонента (я пробовал оба способа, показанные ниже:
$this->emitTo('address','refreshAddressComponent');
or
$this->emitTo('Address','refreshAddressComponent');
[Address.php] содержит:
protected $listeners = ['refreshAddressComponent' => '$refresh'];
Интерфейс компонента - [address.blade.php].
Мне интересно, как я увлажняю этот компонент:
public $userId;
public $firstName ;
public $lastName;
public $mobilePhone;
....
Public function mount(){
$user = auth()->user()->only(['id','firstname','lastname','mobile_phone','receive_texts','home_phone',
'work_phone','alt_phone','dob','age_today','sex','address_1','address_2','address_3','city','state',
'zip_code']);
$this->userId = $user['id'];
$this->firstName = ucWordsSpace($user['firstname']);
$this->lastName = ucWordsSpace($user['lastname']);
$this->mobilePhone = save_phone_number($user['mobile_phone']);
.....
}
Я не передаю модель напрямую. Это причина?