PauloRB.dev

Desenvolvedor de Software

De jQuery para Alpine.js: Um Guia Prático com Laravel e Componentes Reutilizáveis | PauloRB.dev De jQuery para Alpine.js: Um Guia Prático com Laravel e Componentes Reutilizáveis – PauloRB.dev
De jQuery para Alpine.js: Um Guia Prático com Laravel e Componentes Reutilizáveis

De jQuery para Alpine.js: Um Guia Prático com Laravel e Componentes Reutilizáveis

Se você vem do jQuery e quer modernizar seus projetos com Alpine.js, esse tutorial é pra você. Vamos mostrar como sair de ações comuns com jQuery e aplicá-las com Alpine.js, e no final, criar um mini projeto real com Laravel usando formulários reativos e requisições AJAX limpas.

Alpine.js vs jQuery: Conceitos Fundamentais

Alpine.js é um mini framework reativo pensado para funcionar direto no HTML, como o jQuery, mas com uma pegada declarativa e moderna.

Conceito jQuery Alpine.js
DOM Ready $(document).ready(...) x-data inicializa automaticamente
Mostrar/ocultar $('#id').hide() x-show="visivel"
Eventos $('#btn').click(...) @click="acao()"
Acesso a valores $('#input').val() x-model="valor"
AJAX $.get(...), $.post(...) fetch(...), com ou sem async/await

Exemplos Comparativos

1. Manipular formulário

Jquery

$('#btn').click(() => {
    const nome = $('#nome').val();
    alert('Olá ' + nome);
});

Alpine

<div x-data="{ nome: '' }">
    <input x-model="nome" placeholder="Digite seu nome">
    <button @click="alert('Olá ' + nome)">Enviar</button>
</div>

2. AJAX (GET)

jQuery

$.get('/api/usuarios', function(data) {
    console.log(data);
});

Alpine

<div x-data="{
    usuarios: [],
    async carregar() {
        const res = await fetch('/api/usuarios');
        this.usuarios = await res.json();
    }
}" x-init="carregar()">
    <ul>
        <template x-for="user in usuarios">
            <li x-text="user.nome"></li>
        </template>
    </ul>
</div>

3. POST com Alpine + Fetch

<div x-data="{
    nome: '',
    async salvar() {
        await fetch('/api/usuarios', {
            method: 'POST',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify({ nome: this.nome })
        });
    }
}">
    <input x-model="nome">
    <button @click="salvar">Salvar</button>
</div>

Agora Vamos a um mini projeto para aplicarmos na prática:

Mini Projeto: Alpine.js + Laravel com Formulário Dinâmico

🧱 Estrutura

  • Backend: Laravel 12

  • Frontend: Blade + Alpine.js (separado)

  • Objetivo: Cadastrar e listar usuários com AJAX

1️⃣ Laravel – Migration e Controller

Migration:

php artisan make:model Usuario -m

Schema::create('usuarios', function (Blueprint $table) {
    $table->id();
    $table->string('nome');
    $table->string('email')->unique();
    $table->timestamps();
});

Controller:

public function index() {
    return Usuario::all();
}

public function store(Request $request) {
    $dados = $request->validate([
        'nome' => 'required',
        'email' => 'required|email|unique:usuarios',
    ]);

    return Usuario::create($dados);
}

Rotas (API):

Route::get('/usuarios', [UsuarioController::class, 'index']);
Route::post('/usuarios', [UsuarioController::class, 'store']);

2️⃣ Alpine.js – Componente externo

resources/js/components/usuarioForm.js:

export default function usuarioForm() {
    return {
        form: { nome: '', email: '' },
        usuarios: [],
        mensagem: '',
        async salvar() {
            const res = await fetch('/api/usuarios', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json',
                    'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content,
                },
                body: JSON.stringify(this.form)
            });
            this.mensagem = 'Usuário cadastrado com sucesso!';
            this.form.nome = '';
            this.form.email = '';
            this.carregar();
        },
        async carregar() {
            const res = await fetch('/api/usuarios');
            this.usuarios = await res.json();
        },
        init() {
            this.carregar();
        }
    }
}

3️⃣ Alpine + Vite

resources/js/app.js:

import Alpine from 'alpinejs';
import usuarioForm from './components/usuarioForm';

window.Alpine = Alpine;
Alpine.data('usuarioForm', usuarioForm);

Alpine.start();

4️⃣ Blade com Alpine.js

<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <meta name="csrf-token" content="{{ csrf_token() }}">
    <title>Usuários</title>
    @vite('resources/js/app.js')
</head>
<body class="p-6">

<div x-data="usuarioForm">
    <form @submit.prevent="salvar">
        <input x-model="form.nome" placeholder="Nome" class="block mb-2">
        <input x-model="form.email" placeholder="Email" class="block mb-2">
        <button type="submit">Salvar</button>
    </form>

    <div x-text="mensagem" class="text-green-600 mt-2" x-show="mensagem"></div>

    <h3 class="mt-4">Usuários:</h3>
    <ul>
        <template x-for="u in usuarios" :key="u.id">
            <li><strong x-text="u.nome"></strong> - <span x-text="u.email"></span></li>
        </template>
    </ul>
</div>

</body>
</html>

Conclusão

Se você já domina jQuery, Alpine.js é o passo natural para criar interfaces mais modernas, reativas e organizadas, sem sair do Blade e sem complicações como Vue ou React.

Com Alpine, você ganha:

  • Reatividade nativa no HTML

  • Menos código JS separado

  • Facilidade para integrar com Laravel e Livewire

  • Menor curva de aprendizado vindo do jQuery

 

 

 

Mais Posts

Manipulando Strings em GOLANG

Manipulando Strings em GOLANG

Resolvi retormar meus estudo em Go Lang e assim vamos ao primeiro post dessa série de estudos onde vamos aprender... Leia mais

Script para automatizar instalações de ferramentas em ambiente LINUX

Script para automatizar instalações de ferramentas em ambiente LINUX

Para agilizar as instalações das minhas ferramentas de desenvolvimento quando for necessário resolvi montar o seguinte script: Basta colocar o... Leia mais

Como Resolver Problemas de Permissões ao Usar Docker no WSL2

Como Resolver Problemas de Permissões ao Usar Docker no WSL2

O Docker é uma ferramenta poderosa para gerenciar contêineres, e sua integração com o WSL2 no Windows oferece um ambiente... Leia mais

Usando Strategy e Pipeline juntos no Laravel para organizar regras complexas

Usando Strategy e Pipeline juntos no Laravel para organizar regras complexas

À medida que um sistema cresce, a lógica de negócio costuma se tornar mais complexa. Um dia você está apenas... Leia mais