Appearance
Archivos de la Carpeta src
La carpeta src es el corazón de tu aplicación frontend. Contiene todo el código fuente de tu aplicación React, organizado de manera modular para facilitar el desarrollo y el mantenimiento.
main.tsx
Este archivo es el punto de entrada principal de tu aplicación React. Es el primer archivo que se ejecuta cuando tu aplicación carga en el navegador, y es responsable de inicializar el entorno de React y renderizar el componente raíz de tu aplicación.
- Descripción:
main.tsxutiliza la APIcreateRootde React 18 para renderizar la aplicación. Envuelve la aplicación con varios proveedores globales (StrictMode,Suspense,AuthProvider,ToastContainer) que proporcionan funcionalidades esenciales y contexto a todos los componentes hijos. Configura el enrutador de la aplicación (RouterProvider) para gestionar la navegación. - Propósito: Inicializar la aplicación React, establecer los proveedores de contexto y la configuración global (como el enrutamiento y las notificaciones toast), y montar el componente raíz en el DOM.
- Funcionalidad:
createRoot(document.getElementById("root")!): Obtiene el elemento DOM con el ID "root" (normalmente definido enpublic/index.html) y crea una raíz de React 18 para renderizar la aplicación de manera concurrente. El!al final asume que el elemento siempre existirá.<StrictMode>: Un componente de React que ayuda a destacar problemas potenciales en la aplicación. No renderiza ninguna UI visible, pero activa comprobaciones y advertencias adicionales para sus descendientes.<Suspense fallback={<div>Cargando...</div>}>: Permite mostrar un indicador de carga (fallback) mientras los componentes hijos que usanReact.lazy(o que tienen dependencias asíncronas) están cargando.<AuthProvider>: Un proveedor de contexto personalizado (importado desrc/components/auth/auth.context.tsx) que proporciona el estado y las funciones de autenticación a toda la aplicación. Envuelve aRouterProviderpara que todas las rutas y componentes puedan acceder al contexto de autenticación.<RouterProvider router={router} />: Este componente es parte dereact-router-domy es el encargado de habilitar el enrutamiento en la aplicación. Recibe una instancia derouter(definida ensrc/routes/app.routes.ts) que contiene la configuración de todas las rutas de la aplicación.<ToastContainer />: Un componente de la libreríareact-toastifyque se encarga de mostrar mensajes de notificación flotantes (toasts) en la aplicación. Se configura con propiedades comoposition,autoClose,theme, etc., para controlar el comportamiento y la apariencia de las notificaciones.- Importación de Estilos Globales: Importa
react-toastify/dist/ReactToastify.csspara los estilos de las notificaciones y./assets/styles/global.scsspara los estilos CSS globales de la aplicación, asegurando que estén disponibles para todos los componentes.
- Rol en la aplicación: Es el punto de partida de toda la aplicación frontend. Configura el entorno global, los servicios clave (autenticación, enrutamiento, notificaciones) y se asegura de que la aplicación esté lista para renderizar su contenido dinámico y funcional.
tsx
// src/main.tsx
import { StrictMode, Suspense } from "react"; // StrictMode para detección de problemas, Suspense para carga asíncrona.
import { createRoot } from "react-dom/client"; // API de React 18 para crear la raíz de la aplicación.
import { RouterProvider } from "react-router-dom"; // Componente para proporcionar el enrutador de React Router.
import { router } from "./routes/app.routes"; // Importa la configuración de rutas de la aplicación.
import { ToastContainer } from "react-toastify"; // Componente para mostrar notificaciones toast.
import { AuthProvider } from "./components/auth/auth.context"; // Proveedor de contexto para la autenticación.
import "react-toastify/dist/ReactToastify.css"; // Estilos CSS para react-toastify.
import "./assets/styles/global.scss"; // Estilos CSS globales de la aplicación.
// Crea la raíz de React y renderiza la aplicación.
createRoot(document.getElementById("root")!).render(
// StrictMode: Ayuda a identificar problemas potenciales en la aplicación.
<StrictMode>
{/* Suspense: Muestra un fallback mientras componentes se cargan de forma asíncrona. */}
<Suspense fallback={<div>Cargando...</div>}>
{/* AuthProvider: Envuelve la aplicación para proporcionar el contexto de autenticación. */}
<AuthProvider>
{/* RouterProvider: Proporciona la configuración de rutas a toda la aplicación. */}
<RouterProvider router={router} />
{/* ToastContainer: Componente para mostrar notificaciones configurables. */}
<ToastContainer
position="top-right" // Posición de las notificaciones.
autoClose={3000} // Tiempo en milisegundos para que se cierren automáticamente.
hideProgressBar={false} // Muestra/oculta la barra de progreso.
closeOnClick // Cierra la notificación al hacer click.
draggable // Permite arrastrar la notificación.
pauseOnHover // Pausa el cierre automático al pasar el ratón.
theme="light" // Tema visual de la notificación.
/>
</AuthProvider>
</Suspense>
</StrictMode>
);