¿De qué consta lo que va dentro de la carpeta resources que corresponde a la parte visual de una aplicación con Laravel, Inertia, React y shadcn/ui? ¿Qué partes lo componen, cuál es su estructura?
En una aplicación Laravel que utiliza Inertia.js con React como frontend y shadcn/ui para los componentes, la carpeta resources es el corazón de tu parte visual (frontend). Aquí es donde resides todo el código JavaScript, CSS y otros activos que se compilan para el navegador.
La estructura típica y sus componentes principales son los siguientes:
resources
La carpeta resources contiene los activos sin compilar de tu aplicación, como archivos Blade, archivos de idioma y tus activos de frontend (JavaScript, CSS, imágenes, etc.).
resources/css:app.css: Este es el archivo principal de tu CSS. En una configuración con Tailwind CSS, aquí es donde importarías las directivas de Tailwind (@tailwind base;,@tailwind components;,@tailwind utilities;) y cualquier CSS personalizado global./* resources/css/app.css */ @tailwind base; @tailwind components; @tailwind utilities; /* Tu CSS personalizado aquí (si lo necesitas) */
resources/js: Este es el directorio más importante para tu aplicación React/Inertia.app.js: El punto de entrada principal de tu aplicación JavaScript. Aquí es donde se inicializa Inertia y se monta tu aplicación React. También es donde se importan los layouts y componentes de nivel superior.// resources/js/app.js import './bootstrap'; // Para Axios, etc. import '../css/app.css'; // Importa tu CSS de Tailwind import { createInertiaApp } from '@inertiajs/react'; import { resolvePageComponent } from 'laravel-vite-plugin/inertia-helpers'; import { createRoot } from 'react-dom/client'; createInertiaApp({ // Resuelve los componentes de página React resolve: (name) => resolvePageComponent(`./Pages/${name}.jsx`, import.meta.glob('./Pages/**/*.jsx')), setup({ el, App, props }) { const root = createRoot(el); root.render(<App {...props} />); }, progress: { color: '#4B5563', // Color de la barra de progreso de Inertia }, });bootstrap.js: Configuración inicial de JavaScript, como la configuración de Axios para realizar solicitudes HTTP.Layouts:AuthenticatedLayout.jsx: Un componente React que define el diseño general (header, sidebar, footer) para las páginas que requieren autenticación. Las páginas de Inertia suelen envolver su contenido en uno de estos layouts.GuestLayout.jsx: Similar al anterior, pero para páginas públicas (login, registro, etc.).
Pages: Este directorio contiene tus componentes de página principales de React. Cada archivo aquí (o en sus subdirectorios) corresponde a una "página" que Inertia puede cargar.Dashboard.jsx: Un ejemplo de componente de página.Profile/Edit.jsx: Un componente de página anidado.Auth/Login.jsx: Componentes de autenticación.Admin/Users/Index.jsx: Ejemplo de una sección de administración.
Components: Este directorio contiene componentes React reutilizables que no son páginas completas. Aquí es donde brillan los componentes deshadcn/uiy tus propios componentes basados en ellos.ui: Esta subcarpeta es crucial parashadcn/ui. Contiene los componentes que has "shadcn-izado" (copiado y adaptado a tu proyecto). Por ejemplo:button.jsx(el componente Button de shadcn)card.jsx(el componente Card de shadcn)input.jsx(el componente Input de shadcn)dialog.jsx(el componente Dialog de shadcn)table.jsx(el componente Table de shadcn)...y muchos más, cada uno con sus estilos de Tailwind y lógica React.
ApplicationLogo.jsx: Tu propio componente para el logo de la aplicación.Dropdown.jsx: Un componente de menú desplegable.NavLink.jsx: Componentes para enlaces de navegación.TextInput.jsx: Un wrapper para el input de shadcn/ui con manejo de errores de Inertia.ThemeToggle.jsx: Un componente para cambiar entre tema claro/oscuro.
resources/views:app.blade.php: Este es el archivo Blade principal que sirve como la "plantilla" base para tu aplicación Inertia. Contiene eldivcon elid="app"donde se montará tu aplicación React. También incluye los scripts de Vite para la compilación de activos.<!-- resources/views/app.blade.php --> <!DOCTYPE html> <html lang="{{ str_replace('_', '-', app()->getLocale()) }}"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title inertia>{{ config('app.name', 'Laravel') }}</title> <!-- Scripts de Vite para cargar tu JS y CSS --> @viteReactRefresh @vite(['resources/js/app.js', 'resources/css/app.css']) @inertiaHead </head> <body class="font-sans antialiased"> <div id="app" class="min-h-screen bg-gray-100 dark:bg-gray-900"> <!-- Aquí es donde Inertia montará tu aplicación React --> </div> </body> </html>Otros archivos Blade (si los hay): Si tienes algunas vistas que no son manejadas por Inertia (ej. un email de bienvenida, una página de error estática), irían aquí.
resources/lang: Contiene los archivos de idioma de tu aplicación.
Flujo General:
Cuando Laravel recibe una solicitud para una página Inertia, renderiza
resources/views/app.blade.php.Este
app.blade.phpcargaresources/js/app.js(yresources/css/app.css) a través de Vite.resources/js/app.jsinicializa Inertia y React.Inertia determina qué "página" de
resources/js/Pagesdebe renderizarse según la ruta de Laravel.Los componentes de
shadcn/uiy tus propios componentes reutilizables (deresources/js/Components) se utilizan dentro de tus componentes de página y layouts para construir la interfaz de usuario.Tailwind CSS, importado en
resources/css/app.css, proporciona todas las utilidades de estilo que usas directamente en tus componentes React.
Esta estructura promueve una clara separación de responsabilidades y facilita el desarrollo de aplicaciones modernas con Laravel, Inertia y React.
No hay comentarios:
Publicar un comentario