Qué hay de nuevo en Livewire v3

El día llegó. La presentación de Caleb Porzio de Livewire 3 fue una puesta en escena brutal en la que no dejó a nadie con la boca cerrada durante la Laracon.

Qué hay de nuevo en Livewire v3

El día llegó. La presentación de Caleb Porzio de Livewire 3 fue una puesta en escena brutal en la que no dejó a nadie con la boca cerrada durante la Laracon.

Para empezar, Taylor Otwell comenzó diciendo que tanto Inertia como Livewire se habían ganado el derecho de ser ciudadanos de primera clase en Laravel, por lo que el equipo de Laravel les iba a ayudar en lo que fuera necesario para desarrollar sus paquetes. Por eso, la documentación de Livewire ahora está dentro de Laravel: livewire.laravel.com

Novedades de Livewire3

Hay muchas novedades. Por ejemplo, todo el código ha sido reescrito y ahora todo utiliza AlpineJS por detrás, en lugar de mantener dos códigos diferentes.

Importación automática

En primer lugar, Livewire se importará automáticamente en los layouts de los proyectos, por lo que no hay que usar @livewireStyles ni @livewireScripts. Además, como acabo de decir, viene integrado con AlpineJS, por lo que tampoco hay que importarlo! Las siguientes extensiones de AlpineJS vienen ya preinstaladas:

wire:model

Otro cambio grande. Ahora, wire:model no es live por defecto, sino que es deferred. Este es uno de varios cambios propuestos por Caleb para reducir al máximo el número de peticiones entre back y front. Para mantener el funcionamiento tras actualizar a Livewire3, debes hacer los siguientes cambios en tus inputs:

App\Livewire

En esta nueva versión todos los componentes de Livewire irán dentro de App\Livewire en lugar de App\Http\Livewire

wire:navigate

Una de las funcionalidades más aplaudidas del evento. Al añadir wire:navigate a un enlace, la página web se empezará a comportar como una SPA, actualizando únicamente los elementos que cambian de una página a otra!

Forms y validación

Esta es una de mis funcionalidades nuevas favoritas. Primero, podemos usar atributos de PHP para la validación de las variables:

use Livewire\Attributes\Rule; 

class CreatePost extends Component {
	#[Rule('required')]
	public $title = '';
	
	#[Rule('required')]
	public $content = '';

	...
}

Esto elimina la necesidad de llamar al $this→validate() ,  ya que el valor nunca se va a establecer si no se cumplen las reglas.

Además, para componentes un poco más grandes, podemos extraer las variables a un Form, de esta forma:

php artisan livewire:form CreatePost
<?php
 
namespace App\Livewire\Forms;
 
use Livewire\Attributes\Rule;
use Livewire\Form;
use App\Models\Post;
 
class PostForm extends Form
{
    #[Rule('required|min:5')]
    public $title = '';
 
    #[Rule('required|min:5')]
    public $content = '';
 
    public function store()
    {
        Post::create($this->all());
    }
}

Tras crear el formulario, podemos actualizar nuestro componente para usar el formulario en lugar de las variables:

class CreatePost extends Component
{
    public PostForm $form;
 
    public function save()
    {
        $this->form->store();
 
        return $this->redirect('/posts');
    }
 
    // ...
}

Cómo actualizar a Livewire3

Caleb y Taylor han trabajado juntos en re-escribir la documentación de Livewire. Además del comando livewire:upgrade, que actualiza la aplicación automáticamente, también tienes una guía de actualización aquí:

Upgrade Guide | Laravel
A full-stack framework for Laravel that takes the pain out of building dynamic UIs.