Back

Primeiros Passos com Laravel Livewire

Primeiros Passos com Laravel Livewire

Se você já quis construir interfaces reativas e dinâmicas em uma aplicação Laravel sem recorrer ao Vue, React ou a uma pilha de JavaScript customizado, Laravel Livewire merece sua atenção. Ele permite que você escreva componentes de UI com estado inteiramente em PHP e Blade, enquanto o Livewire cuida das atualizações do lado do navegador automaticamente.

Este guia aborda como o Livewire funciona, como construir seu primeiro componente e como é a experiência de desenvolvimento moderna no Livewire 4.

Principais Pontos

  • O Livewire permite construir UIs reativas e dinâmicas no Laravel usando apenas PHP e Blade — nenhum framework JavaScript separado é necessário.
  • Componentes de arquivo único mantêm sua lógica PHP e template Blade em um único arquivo, simplificando o desenvolvimento.
  • O Livewire cuida da sincronização de estado entre servidor e navegador automaticamente através de requisições AJAX leves e patching inteligente do DOM.
  • O Alpine.js vem empacotado com o Livewire para interações do lado do cliente, enquanto o Livewire cuida de tudo que precisa de lógica do lado do servidor.

O Que É Laravel Livewire?

Livewire é um framework full-stack para Laravel que faz com que construir UIs dinâmicas pareça escrever PHP comum. Você define uma classe de componente com propriedades e métodos públicos, a emparelha com um template Blade, e o Livewire cuida de sincronizar o estado entre o servidor e o navegador usando requisições AJAX leves nos bastidores.

Sem WebSockets. Sem API separada. Sem framework JavaScript para configurar.

Ele se encaixa naturalmente no ecossistema do Laravel e funciona especialmente bem para:

  • Manipulação de formulários com validação em tempo real
  • Dashboards com dados ao vivo
  • Widgets interativos como filtros de busca, modais e fluxos de múltiplas etapas

Aplicações Livewire modernas também se integram perfeitamente com os recentes kits iniciais do Laravel construídos em torno de workflows baseados em Livewire, permitindo que você obtenha uma estrutura pronta para produção com configuração mínima.

Como Funcionam os Componentes Reativos do Livewire

Quando um usuário interage com um componente Livewire — clicando em um botão, digitando em um campo — o Livewire envia uma requisição ao servidor com o estado atual do componente. O servidor processa a ação, atualiza o estado e retorna uma renderização atualizada. O Livewire então aplica patches inteligentemente apenas nas partes alteradas do DOM.

Da perspectiva do desenvolvedor, você está apenas escrevendo métodos PHP e lendo propriedades públicas. O comportamento reativo acontece automaticamente.

Construindo Seu Primeiro Componente Livewire de Arquivo Único

Aplicações Livewire modernas comumente usam componentes de arquivo único, onde a classe PHP e o template Blade vivem em um único arquivo .blade.php. Isso mantém a lógica relacionada junta e é um padrão comum no Livewire moderno.

Aqui está um contador simples para ilustrar a ideia central:

<?php

use Livewire\Component;

new class extends Component {
    public int $count = 0;

    public function increment(): void
    {
        $this->count++;
    }

    public function decrement(): void
    {
        $this->count--;
    }
};

?>

<div>
    <button wire:click="decrement">-</button>
    <span>{{ $count }}</span>
    <button wire:click="increment">+</button>
</div>

O que está acontecendo aqui:

  • public int $count é o estado reativo do componente
  • increment() e decrement() são métodos do lado do servidor acionados a partir do navegador
  • wire:click diz ao Livewire qual método chamar quando o botão é clicado
  • A exibição de {{ $count }} é atualizada automaticamente após cada interação — sem recarregar a página

Nota: Todo componente Livewire deve ter um único elemento HTML raiz. Múltiplos elementos raiz causarão um erro.

Para um exemplo mais prático, um formulário de criação de post usaria wire:model para vinculação de dados bidirecional e wire:submit para lidar com o envio do formulário com validação integrada — tudo sem escrever uma única linha de JavaScript.

Quando Usar Livewire em Vez de Alpine.js

Alpine.js vem junto com o Livewire e cuida de interações leves e puramente do lado do cliente — alternar um dropdown, mostrar um tooltip. O Livewire é a escolha certa quando a interação precisa de lógica do lado do servidor: consultar um banco de dados, executar validação, salvar dados ou gerenciar estado complexo.

Use Alpine para polimento de UI. Use Livewire para componentes reativos que precisam do seu backend Laravel.

Importante: Se seu projeto já tem o Alpine instalado separadamente, certifique-se de que ele não está sendo carregado duas vezes. O Livewire empacota o Alpine internamente, e instâncias duplicadas do Alpine podem causar conflitos.

O Que Explorar em Seguida

Uma vez que você esteja confortável com o básico, as áreas mais valiosas a explorar são:

  • Modificadores do wire:model.live para atualizações em tempo real, .blur para sincronizar ao perder o foco do campo
  • wire:loading — Mostrar estados de carregamento enquanto o servidor processa uma requisição
  • Validação — O Livewire se integra diretamente com o validador do Laravel
  • Comunicação entre componentes — Use dispatch() para enviar eventos entre componentes

Conclusão

A verdadeira força do Livewire se mostra quando você começa a substituir o que teria sido JavaScript complexo por PHP direto. Ele mantém você dentro das convenções do Laravel enquanto entrega o tipo de experiência reativa que os usuários esperam de aplicações web modernas. Comece com um formulário interativo em sua aplicação Laravel existente, e o padrão se torna imediatamente claro.

Perguntas Frequentes

Não. O Livewire empacota o Alpine internamente. Instalar uma cópia separada do Alpine junto com o Livewire pode causar conflitos se o Alpine for carregado duas vezes. Se seu projeto já inclui o Alpine como uma dependência independente, certifique-se de não estar duplicando-o ao adicionar o Livewire.

Sim, o Livewire pode coexistir com Vue ou React. Você pode usar o Livewire para componentes interativos orientados pelo servidor e reservar Vue ou React para seções que requerem renderização pesada do lado do cliente. Eles operam independentemente, então não há conflitos inerentes desde que eles tenham como alvo partes diferentes do DOM.

Cada interação do Livewire envia uma requisição ao servidor, similar a uma chamada AJAX padrão. Para a maioria dos casos de uso, a sobrecarga é negligenciável. No entanto, componentes com atualizações muito frequentes, como digitação em tempo real em formulários grandes, podem se beneficiar de modificadores do wire:model como .blur ou .live para reduzir viagens desnecessárias ao servidor.

A compatibilidade do Livewire depende da versão que você instala, então sempre verifique a documentação oficial de instalação e atualização do Livewire antes de iniciar um novo projeto. Para novas aplicações, use a documentação atual do Livewire em vez de confiar em tutoriais mais antigos da v2 ou v3.

Gain Debugging Superpowers

Unleash the power of session replay to reproduce bugs, track slowdowns and uncover frustrations in your app. Get complete visibility into your frontend with OpenReplay — the most advanced open-source session replay tool for developers. Check our GitHub repo and join the thousands of developers in our community.

OpenReplay