3-Entendiendo los Slots en los Componentes de Laravel Blade
Entendiendo los Slots en los Componentes de Laravel Blade
Los slots son una característica fundamental de los componentes en Laravel Blade que permiten inyectar contenido dinámico dentro de tus componentes. Son similares a los "children" en otros sistemas de componentes.
Conceptos Básicos de Slots
1. Slot Principal ($slot)
El slot principal es el contenido que se pasa entre las etiquetas de apertura y cierre del componente.
Ejemplo de uso:
<x-alert>
Este es el contenido que irá en el slot principal
</x-alert>En el componente (resources/views/components/alert.blade.php):
<div class="alert">
{{ $slot }} <!-- Aquí se renderizará el contenido -->
</div>2. Slots Nombrados
Permiten tener múltiples áreas de contenido en un componente.
Ejemplo de uso:
<x-card>
<x-slot name="header">
Título de la tarjeta
</x-slot>
Contenido principal de la tarjeta
<x-slot name="footer">
Pie de la tarjeta
</x-slot>
</x-card>Componente card.blade.php:
<div class="card">
<div class="card-header">
{{ $header }}
</div>
<div class="card-body">
{{ $slot }} <!-- Slot principal -->
</div>
<div class="card-footer">
{{ $footer }}
</div>
</div>Ejemplo Práctico con el Gestor de Tareas
1. Componente Layout con Slots
Componente app-layout (resources/views/layouts/app.blade.php):
<!DOCTYPE html>
<html>
<head>
<title>{{ $title ?? 'Gestor de Tareas' }}</title>
</head>
<body>
<x-navbar />
<main class="container">
<!-- Slot principal para el contenido específico de cada página -->
{{ $slot }}
</main>
<x-footer>
<!-- Slot con valor por defecto -->
<x-slot name="copyright">
© {{ date('Y') }} Gestor de Tareas
</x-slot>
</x-footer>
</body>
</html>2. Uso del Layout en una Vista
resources/views/tareas/index.blade.php:
<x-app-layout title="Lista de Tareas">
<!-- Este contenido va al slot principal -->
<h1>Mis Tareas</h1>
@foreach($tareas as $tarea)
<x-tarea-card :tarea="$tarea">
<!-- Slot adicional para acciones -->
<x-slot name="acciones">
<x-boton href="{{ route('tareas.mostrar', $tarea['id']) }}">
Ver Detalles
</x-boton>
</x-slot>
</x-tarea-card>
@endforeach
</x-app-layout>3. Componente TareaCard con Slots
resources/views/components/tarea-card.blade.php:
<div class="tarea {{ $tarea['completada'] ? 'completada' : 'pendiente' }}">
<h3>{{ $tarea['titulo'] }}</h3>
<p>{{ $tarea['descripcion'] }}</p>
<!-- Slot para contenido adicional -->
@isset($acciones)
<div class="acciones">
{{ $acciones }}
</div>
@endisset
<!-- Slot principal para cualquier otro contenido -->
{{ $slot }}
</div>Tipos de Slots Avanzados
1. Slots con Valores por Defecto
Puedes definir valores por defecto para los slots:
@props(['title' => 'Título por defecto'])
<h2>{{ $title }}</h2>
{{ $slot }}2. Slots Escopados
Pasas datos al slot como si fuera un componente:
<x-table :$users>
<x-slot:header column="nombre">
Nombre del Usuario
</x-slot:header>
</x-table>En el componente:
@props(['users'])
<table>
<thead>
<tr>
{{ $header(['column' => 'nombre']) }}
</tr>
</thead>
<!-- ... -->
</table>Buenas Prácticas con Slots
Usa slots nombrados para contenido complejo con múltiples secciones
Mantén los slots simples - si necesitas mucha lógica, considera dividir en más componentes
Documenta los slots disponibles en componentes complejos con comentarios
Usa valores por defecto para hacer componentes más flexibles
Considera slots escopados cuando necesites pasar datos al contenido del slot
Los slots son una herramienta poderosa en Laravel Blade que te permite crear componentes altamente reutilizables y flexibles, manteniendo un código limpio y organizado
Comentarios
Publicar un comentario