Laravel Livewire : Компонентные ключи не работают, если не используется uniqid ()?

#php #laravel #laravel-livewire

Вопрос:

У меня есть такой livewire компонент, как:

Класс Компонентов:

 class TestComponent extends Component
{
    public $showFilter = true;
    
    /*
    |--------------------------------------------------------------------------
    | Handle : Filter Button Click
    |--------------------------------------------------------------------------
    */
    public function handleFilterButtonClick() {

        $this->showFilter = !$this->showFilter;
    }
    
    /*
    |--------------------------------------------------------------------------
    | Render
    |--------------------------------------------------------------------------
    */

    public function render()
    {
        return view('livewire.something');
    }
    
}
 

Напильник для лезвий:

 
<div class="show-filter-btn" wire:click="handleFilterButtonClick">
    hide / show filters
</div>

<div class="some-div">

    @if($showFilter)
    
        @livewire('search.side-bar', key(uniqid()));
    
    @endif
    
</div>

<div style="flex-grow: 1"> {{-- ref={ function(element) { self._input = element; } } --}}

    <div>

        @livewire('search.pagination', [], key(uniqid()));
        
    </div>
        
</div>

 

когда я щелкнул show-filter-btn его show/hide в sidebar компонент, я использую uniqid() , чтобы создать key() для обоих components , потому что если я использую что-то ( например: abc-123123 , sidebar-1234 и т. д.), Он будет бросать index.js:32 Uncaught (in promise) TypeError: Cannot read property 'fingerprint' of null ошибку, я новичок livewire , поэтому я не совсем понимаю, как оно работает, элементы не рядом друг с другом, так почему же они тоже нужны unique ключи, чтобы идентифицировать друг друга? реагировать нужно только на ключи, когда есть loop и list

Ответ №1:

Я не уверен, что это та же ошибка, но сегодня я столкнулся с чем-то подобным, когда у меня было несколько компонентов в одном файле blade. Я узнал, что если я использую model->id в качестве ключа livewire $более чем для 1 компонента, livewire запутался и не смог определить разницу между индексом #1 для компонента A и индексом #1 для компонента B. Казалось, он потерял представление о том, какая петля применима.

В итоге я изменил свой код, объединив строковый идентификатор, и проблема была решена.

key($account->id) стал key('account-'.$account->id)

и

key($role->id) стал key('role-'.$role->id)

Больше не сталкивались ключевые ценности, тем самым решая проблему.

Опять же, не уверен, что это та же задача, что и у вас, но достаточно близко, чтобы я мог вложить свои 2 цента.