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

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