Nesting Components
Livewire supports nesting components. Component nesting can be an extremely powerful technique, but there are a few gotchas worth mentioning up-front:
- Nested components CAN accept data parameters from their parents, HOWEVER they are not reactive like props from a Vue component.
- Livewire components should NOT be used for extracting Blade snippets into separate files. For these cases, Blade includes or components are preferable.
Here is an example of a nested component called add-user-note
from another Livewire component's view.
use Livewire\Component;
class UserDashboard extends Component
{
public $user;
public function mount(User $user)
{
$this->user = $user;
}
public function render()
{
return view('livewire.user-dashboard');
}
}
<div>
<h2>User Details:</h2>
Name: {{ $user->name }}
Email: {{ $user->email }}
<h2>User Notes:</h2>
<div>
@livewire('add-user-note', $user)
</div>
</div>
Keeping Track Of Components In A Loop
Similar to VueJs, if you render a component inside a loop, Livewire has no way of keeping track of which one is which. To remedy this, livewire offers a special "key" syntax:
<div>
@foreach ($users as $user)
@livewire('user-profile', $user, key($user->id))
<!-- key() using Laravel 7's tag syntax -->
<livewire:user-profile :user="$user" :key="$user->id">
@endforeach
</div>
If you are on Laravel 7 or above, you can use the tag syntax.
<div>
@foreach ($users as $user)
<livewire:user-profile :user="$user" :key="$user->id">
@endforeach
</div>
← Previous Topic
Flash Messages
Next Topic →