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

Como iniciar, parar e reiniciar o Apache Web Server no Linux

Como iniciar, parar e reiniciar o Apache Web Server no Linux

Comandos  para controlar o funcionamento do apache em ambientes de desenvolvimento locais: Estes Comandos Servem para ambientes Ubuntu/Debian: Leia mais

Jogo da Velha com HTML, CSS e JavaScript

Jogo da Velha com HTML, CSS e JavaScript

Vamos hoje desenvolver uma atividade que é comum em alguns testes de programação onde iremos desenvolver um simples jogo da... Leia mais

Como atualizar multiplos registros com o método whereIn no Laravel 9 ?

Como atualizar multiplos registros com o método whereIn no Laravel 9 ?

O Laravel 9 é um framework PHP moderno e poderoso que oferece muitas ferramentas úteis para desenvolvedores web. Uma das... Leia mais

Alterar função ONCLICK de um botão com JavaScript Vanilla

Alterar função ONCLICK de um botão com JavaScript Vanilla

Vamos lá a mais um estudo de caso. Na tela abaixo temos um crud simples cujo frontend foi feito com... Leia mais