10分鐘搞懂Livewire巢狀組件

10分鐘搞懂Livewire巢狀組件

Livewire 支持 巢狀組件,將組件進行巢狀化是非常強大的功能,巢狀組件能夠從其父組件取得資料參數,這是一個名為 add-user-note 的巢狀組件,被另一個 Livewire 組件視圖叫用

//App/Http/Livewire/UserDashboard.php

class UserDashboard extends Component
{
    public User $user;
}
//resources/views/livewire/userDashboard.blade.php

<div>
    <h2>User Details:</h2>
    Name: {{ $user->name }}
    Email: {{ $user->email }}

    <h2>User Notes:</h2>
    <div>
        @livewire('add-user-note', ['user' => $user])
    </div>
</div>

或許你會有在迴圈中持續追蹤組件的需求,沒問題!

就跟 Vue.js 一樣,如果你在迴圈裡頭去渲染組件,Livewire 無法去追蹤哪個是哪個。為了解決這個尷尬的狀況,livewire 提供了一個特殊的 "key" 語法:

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

假如你是 Laravel 7 或以上的版本,你還能夠使用 tag 語法,寫法則是像這樣

<div>
    @foreach ($users as $user)
        <livewire:user-profile :user="$user" :key="$user->id">
    @endforeach
</div>

在迴圈中的相鄰組件

在某些情況下,你也許會需要在迴圈中找到相鄰組件。這種情況就需要更多的考慮如何使用 key 值,每一個組件都需要它專屬的 key 值,但使用以上的方法將會導致相鄰的組件會擁有相同的 key,這將導致不可見的問題

為了解決這個問題,你需要確保每一個key都是唯一的,那該怎麼做勒?

有個不錯的策略是你可以把組件名稱作為key的前綴,舉例來說:

<!-- user-profile component -->
<div>
    //不好的做法,容易導致不同組件有相同的key
    <livewire:user-profile-one :user="$user" :key="$user->id">
    <livewire:user-profile-two :user="$user" :key="$user->id">

    //好的做法
    <livewire:user-profile-one :user="$user" :key="'user-profile-one-'.$user->id">
    <livewire:user-profile-two :user="$user" :key="'user-profile-two-'.$user->id">
</div>

分享這篇文章:

關聯文章:

訂閱電子報,索取 Laravel 學習手冊

價值超過 3000 元,包含常用 Laravel 語法與指令!

一小時免費求職講座

3個應徵軟體工程師前該知道的秘訣

取得免費課程連結

Laravel 百萬年薪特訓營

從最基礎的 PHP 語法開始,包含所有你該知道的網頁基礎知識,連同 Laravel 從零開始一直到實戰,最後還將告訴你如何找好工作,讓你及早擁有百萬年薪