⚡Introducción a Livewire 4 — Crear UIs reactivas sin JavaScript
Se explica cómo construir UIs interactivas sin escribir JavaScript utilizando Livewire 4, el paquete de primera parte de Laravel, desde la instalación hasta ejemplos de código prácticos.
Cuando intentabas crear UIs dinámicas en Laravel, antes no había más remedio que combinar frameworks JavaScript como Vue.js o React, o escribir tú mismo las peticiones AJAX.Livewire es un paquete para Laravel que resuelve ese problema. Permite construir UIs reactivas solo con PHP y Blade. Puedes implementar en PHP funcionalidades que antes requerían JavaScript, como validación de formularios en tiempo real, búsqueda en vivo, contadores, etc.
Livewire 4 funciona con Laravel 10 o superior y PHP 8.1 o superior. La versión más reciente actualmente es Livewire 4.
Un componente Livewire es la combinación de una clase PHP en el servidor y una plantilla Blade. Cuando el usuario hace clic en un botón o rellena un formulario, Livewire envía por debajo una petición AJAX, ejecuta PHP y refleja en la página solo la parte modificada. El desarrollador no tiene que ser consciente de este mecanismo y puede escribir todo solo con PHP.
Existe un comando Artisan para generar componentes Livewire. Vamos a crear un contador simple.
php artisan make:livewire Counter
Con este comando se genera un componente de archivo único llamado resources/views/components/⚡counter.blade.php.
El ⚡ en el nombre del archivo sirve para identificar a simple vista los componentes Livewire. Mejora la visibilidad en el editor. Si no lo necesitas, puedes desactivarlo en la configuración.
Edita el archivo generado de la siguiente manera.
<?phpuse Livewire\Component;new class extends Component { public int $count = 0; public function increment(): void { $this->count++; } public function decrement(): void { $this->count--; }};?><div> <h1>Contador: {{ $count }}</h1> <button wire:click="increment">+1</button> <button wire:click="decrement">-1</button></div>
Para incrustar este componente en una plantilla Blade, se usa la sintaxis normal de componentes Blade.
<livewire:counter />
Cada vez que se hace clic en un botón, el contador se actualiza sin recargar la página. wire:click es el mecanismo para invocar un método PHP en lugar de JavaScript.
Por defecto, wire:model sincroniza con el servidor solo cuando se ejecuta una acción (por ejemplo, el envío del formulario). Si quieres que se sincronice a cada entrada, añade el modificador .live.
Notación
Comportamiento
wire:model
Sincroniza solo cuando se ejecuta una acción (envío de formulario, etc.) (por defecto)
wire:model.live
Envía una petición a cada entrada
wire:model.blur
Sincroniza al perder el foco (no se genera petición)
Las propiedades con #[Validate] disparan una validación automática en cada actualización. Al combinarlas con wire:model.live.blur, logras una experiencia de validación en tiempo real en la que aparece el mensaje de error justo al perder el foco.
$this->validate() verifica todas las propiedades a la vez al enviar el formulario. El patrón recomendado es usarlo en dos niveles junto con la validación automática mediante #[Validate].
Si quieres insertar procesamiento después de que se actualice una propiedad, usa updated(). Si quieres acotarlo a una propiedad concreta, inclúyela en el nombre del método.
<?phpuse Livewire\Component;new class extends Component { public string $username = ''; public function updatedUsername(): void { $this->username = strtolower($this->username); }};?><div> <input type="text" wire:model.live="username"> <p>Nombre de usuario: {{ $username }}</p></div>
A cada entrada, se convierte automáticamente a minúsculas.
Resumen de los casos de uso en los que Livewire encaja especialmente bien.
Caso de uso
Lo que Livewire puede lograr
Procesamiento de formularios
Validación en tiempo real y muestra de errores
Listados de datos
Búsqueda en vivo, ordenación y paginación
Contadores y toggles
Actualizar UI sin recargar la página
Panel de administración
CRUD con integración directa con Eloquent
Formularios tipo wizard
Gestión de pasos implementada en PHP
Livewire lo pueden empezar a usar hoy mismo los ingenieros Laravel “que hayan usado Blade”. Su mayor fortaleza es que permite lograr UIs interactivas sin el coste de aprendizaje de un framework JavaScript.Cuando se necesitan interacciones avanzadas al nivel de una SPA, Inertia.js encaja mejor, pero para formularios, paneles de administración o tablas de datos, en muchos casos Livewire permite implementarlo de manera más simple. Empieza probando con un componente pequeño.
Documentación oficial de Livewire
Consulta la documentación oficial para todas las funcionalidades de Livewire (subida de archivos, paginación, testing, etc.).