#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 цента.