Como listar registro do banco de dados com Laravel 11 e React


Neste tutorial, será apresentado como listar registros do banco de dados utilizando Laravel 11 + Breeze + React e como criar a paginação.

Primeiramente, será demonstrado como recuperar os registros do banco de dados com Laravel. 

Em seguida, será explicado como criar a página para exibir a lista. 

Por fim, será mostrado como implementar a paginação com Laravel.

Download do código fonte desenvolvido na aula: Download

PlayList sobre Laravel 11 + Breeze + React 11: Acessar

Receber as aulas gratuitas do curso de Laravel: Acessar


Para começar, é utilizado como base o projeto da aula "Como enviar e-mail recuperar senha no Breeze e Laravel 11".

Criada a rota no arquivo "routes/web.php".

Route::get('/users', [UserController::class, 'index'])->name('users.index');

Criado o método "index" na controller "app/Http/Controllers/UserController.php". O método é responsável em recuperar os registros do banco de dados e também carregar a view.

public function index(): Response
{
    $users = User::paginate(2);

    return Inertia::render('Users/UserIndex', ['users' => $users]);
}

Criada a view com React no Laravel, em "resources/js/Pages/Users/UserIndex.js" para exibir os registros recuperados do banco de dados.

import Pagination from '@/Components/Pagination';
import AuthenticatedLayout from '@/Layouts/AuthenticatedLayout';
import { Head } from '@inertiajs/react';

export default function UserIndex({ auth, users }) {
    return (
        <AuthenticatedLayout
            user={auth.user}
            header={<h2 className="font-semibold text-xl text-gray-800 dark:text-gray-200 leading-tight">Usuário</h2>}
        >
            <Head title="Usuário" />

            <div className="py-4 max-w-7xl mx-auto sm:px-6 lg:px-8">
                <div className="overflow-hidden bg-white shadow-lg sm:rounded-lg dark:bg-gray-800">
                    <div className="flex justify-between items-center m-4">
                        <h3 className="text-lg">Listar</h3>
                        <div className="flex space-x-4">
                            Cadastrar
                        </div>
                    </div>

                    <table className="min-w-full divide-y divide-gray-200 dark:divide-gray-700">
                        <thead className="bg-gray-50 dark:bg-gray-700">
                            <tr>
                                <th className="px-6 py-3 text-left text-sm font-medium text-gray-500 tracking-wider">ID</th>
                                <th className="px-6 py-3 text-left text-sm font-medium text-gray-500 tracking-wider">Nome</th>
                                <th className="px-6 py-3 text-left text-sm font-medium text-gray-500 tracking-wider">E-mail</th>
                                <th className="px-6 py-3 text-center text-sm font-medium text-gray-500 tracking-wider">Ações</th>
                            </tr>
                        </thead>
                        <tbody className="bg-white divide-y divide-gray-200 dark:bg-gray-800 dark:divide-gray-700">
                            {users.data.map((user) => (
                                <tr key={user.id}>
                                    <td className="px-6 py-2 text-sm text-gray-500 tracking-wider">
                                        {user.id}
                                    </td>
                                    <td className="px-6 py-2 text-sm text-gray-500 tracking-wider">
                                        {user.name}
                                    </td>
                                    <td className="px-6 py-2 text-sm text-gray-500 tracking-wider">
                                        {user.email}
                                    </td>
                                    <td className="px-6 py-2 text-center text-sm text-gray-500 tracking-wider">
                                        Visualizar Editar Apagar
                                    </td>
                                </tr>
                            ))}
                        </tbody>
                    </table>

                    {/* Paginação */}
                    <Pagination links={users.links} currentPage={users.current_page} />

                </div>
            </div>
        </AuthenticatedLayout>
    );
}

Baixar o código-fonte completo do projeto.

Bom, era isso. Espero que o tutorial tenha sido útil!