Laravel Livewire key() ожидает, что параметр 1 будет массивом с заданным целым числом | вложенные компоненты | загрузка компонента внутри цикла
Я уже некоторое время работаю с https://laravel-livewire.com/, у меня есть вложенные компоненты, которые представляют собой список продуктов для моего сайта, и внутри этого списка есть еще один компонент для добавления продукта в список желаний. Согласно документации, указанной здесь, в нем говорится
"Подобно VueJs, если вы визуализируете компонент внутри цикла, Livewire не имеет возможности отслеживать, какой из них какой. Чтобы исправить это, livewire предлагает специальный синтаксис" ключа ":
Нравится:
<div>
@foreach ($users as $user)
@livewire('user-profile', $user, key($user->id))
@endforeach
</div>
Вот мои фрагменты кода из моего проекта.
<div>
@foreach($products as $product)
<div class="product-box white-bg mb-8" data-dusk="product">
{{-- here im passing product id as param in key(), 'productList' is a static value for a variable of mount(). --}}
@livewire('desktop.wish-list-add', $product, key($product->id), 'productList')
<div class="product-content d-flex justify-content-between align-items-center p-5">
...............
@endforeach
{{ $products->links() }}
</div>
Проблема в том, что когда я пытаюсь передать $product->id в качестве параметра для key(), появляется ошибка
key() expects parameter 1 to be array, integer given
Но документ ясно показывает, что мы должны передать id как param. Кто-нибудь до сих пор сталкивался с этой проблемой?
2 ответа
Хорошо , я нашел решение (однако для меня это не имеет смысла, но оно работает:/). Вы должны передать другие параметры для mount() следующим образом:
@livewire('desktop.wish-list-add', 'productList', $product->id, key($product->id))
Вместо этого:
@livewire('desktop.wish-list-add', $product, key($product->id), 'productList')
@livewire('photos.photo-wire', ['photo' => $photo], key($photo->id))
вместо
@livewire('photos.photo-wire', ['photo' => $photo, key($photo->id)])
потому что это вызовет ошибку:
key() expects parameter 1 to be array, integer given