Компонент 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']);

.....
}

Я не передаю модель напрямую. Это причина?

Другие вопросы по тегам