Laravel Livewire key() 期望参数 1 是数组,给定整数 |嵌套组件 |在循环中加载组件

Posted

技术标签:

【中文标题】Laravel Livewire key() 期望参数 1 是数组,给定整数 |嵌套组件 |在循环中加载组件【英文标题】:Laravel Livewire key() expects parameter 1 to be array, integer given | nested components | loading a component inside a loop 【发布时间】:2020-06-12 05:52:30 【问题描述】:

我已经使用Laravel livewire 有一段时间了,我有一个嵌套组件,它是我网站的产品列表,在该列表中我还有另一个用于将产品添加到愿望清单的组件。根据文档所述 here ,它说

“类似于 VueJs,如果你在循环中渲染一个组件,Livewire 无法跟踪哪个是哪个。为了解决这个问题,livewire 提供了一种特殊的“key”语法:”

像这样:

<div>
    @foreach ($users as $user)
        @livewire('user-profile', $user, key($user->id))
    @endforeach
</div>

这是我项目中的代码 sn-ps。

<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 作为参数传递。到目前为止,有人遇到过这个问题吗?

【问题讨论】:

【参考方案1】:
@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

【讨论】:

【参考方案2】:

好的,我找到了解决方案(但这对我来说没有意义,但它有效:/) 您必须像这样为 mount() 传递其他参数:

@livewire('desktop.wish-list-add', 'productList', $product->id, key($product->id))

而不是这个:

@livewire('desktop.wish-list-add', $product, key($product->id), 'productList')

【讨论】:

以上是关于Laravel Livewire key() 期望参数 1 是数组,给定整数 |嵌套组件 |在循环中加载组件的主要内容,如果未能解决你的问题,请参考以下文章

Laravel-livewire:为啥触发事件会执行 render() 方法?

Laravel 8 和 Livewire - 查询不起作用

laravel - livewire 整页组件

Laravel Livewire 分页

Laravel 与 JetStream 和 LiveWire 不渲染(尾风)

Laravel 和 Livewire:组件更改时如何执行 javascript 函数?