Skip to main content

¿Qué es React?

React es una biblioteca de JavaScript para construir interfaces de usuario, desarrollada y mantenida por Meta (antes Facebook). Se caracteriza por su descripción declarativa de la UI y una arquitectura basada en componentes, y se utiliza en un amplio rango: desde pequeños widgets hasta SPAs completas. El núcleo de React es el renderizado eficiente a través del DOM virtual. Cuando cambia el estado (state), React refleja en el DOM solo la diferencia, así que no hace falta manipular manualmente el DOM.
En esta página se explica la combinación de React 19 e Inertia v3. Los starter kits de Laravel 13 usan esta configuración por defecto.

JSX y TSX

Los componentes de React se escriben con la sintaxis JSX (JavaScript XML). Permite escribir una notación parecida a HTML directamente dentro de JavaScript.
En los starter kits se adopta TypeScript (.tsx) como estándar. Con las definiciones de tipo se mejora el autocompletado del IDE y se detectan bugs de forma temprana.
Los starter kits de React de Laravel usan TypeScript + TSX como estándar. Todos los ejemplos de esta página también están en TSX.

Posición dentro de Laravel

Historia

La relación entre React y Laravel es algo más reciente que la de Vue, pero actualmente tiene un tratamiento igual o superior. En Laravel 6 (2019) el scaffold de autenticación se separó al paquete laravel/ui, y junto con Vue se ofreció también un scaffold para React. Sin embargo, en aquel momento Vue era predominante y la presencia de la versión React era escasa. Con la incorporación del stack Inertia + React en Laravel Breeze (2021) comenzó su adopción real, y con la renovación de los starter kits de Laravel 12 (2025), React pasó a estar en pie de igualdad con Vue (más aún, apareciendo el primero).

Estilo dominante actual: Inertia × React

El uso central de React en Laravel actualmente es Inertia × React. Inertia permite realizar una arquitectura de “monolito moderno” en la que se pasan datos directamente desde los controladores de Laravel a componentes de React sin diseñar una API.

Configuración

Vía starter kit (recomendado)

Al iniciar un proyecto nuevo, usar el starter kit es lo más sencillo.
Si eliges React en el prompt interactivo, se configura automáticamente todo lo siguiente.
  • inertiajs/inertia-laravel (adaptador del lado servidor)
  • @inertiajs/react (adaptador del lado cliente)
  • react + react-dom (React 19)
  • @vitejs/plugin-react (plugin de Vite)
  • TypeScript + @types/react
  • Tailwind CSS + biblioteca de componentes shadcn/ui
  • Middleware HandleInertiaRequests
  • Pantallas de autenticación como login y registro (ya implementadas con Inertia + React + TypeScript)

Instalación manual

Si vas a añadirlo a un proyecto existente, instala por separado el lado servidor y el lado cliente.
A continuación, añade el plugin de React en vite.config.ts.
Arranca la app Inertia en resources/js/app.tsx.
Para los detalles de la instalación manual (configuración de la plantilla raíz, registro del middleware, etc.), consulta la documentación oficial de Inertia.

Estructura de directorios

En los starter kits, los componentes de página de React se colocan en el directorio resources/js/pages/.
Cuando escribes Inertia::render('posts/index', [...]), el componente correspondiente es resources/js/pages/posts/index.tsx.

Fundamentos de la sintaxis JSX

React usa JSX. Es un estilo en el que se escribe sintaxis parecida a HTML dentro de JavaScript. Presentamos los patrones mínimos que conviene conocer para leer el código de los starter kits.

{} — Interpolación de variables

Dentro de JSX se usa {} para incrustar valores o expresiones de JavaScript.

Condicionales — && y operador ternario

React no tiene una directiva equivalente a v-if. Para condicionales simples usa el operador &&, y para if/else, el operador ternario ? :.

Renderizado de listas — .map()

Para renderizar listas se usa Array.map(). Para permitir un diff eficiente, hay que indicar siempre la prop key.
Es el equivalente a v-for :key de Vue o {#each} de Svelte.

className — Nombre de clase CSS

Como JSX se compila a JavaScript, class es palabra reservada. Para las clases CSS se usa className.

Manejadores de eventos — camelCase

Los atributos de evento en JSX se escriben en camelCase, y se les pasa la referencia a una función.

Fundamentos del componente de página

Los componentes de página de Inertia son componentes React normales. Los datos pasados desde el controlador de Laravel se reciben como props.

Controlador

Componente de página React

Solo con recibir las props como argumento del componente puedes usar tal cual los datos pasados desde el controlador. No hace falta definir una API REST.
Al usar el componente <Link> que ofrece @inertiajs/react, la navegación entre páginas se hace por XHR y se evita la recarga completa del navegador.
Se escribe igual que una etiqueta <a> normal, pero por debajo Inertia solo cambia el componente de página, con lo que se logra una sensación de operación como en una SPA.

Componente Form

El componente <Form> que ofrece @inertiajs/react es el estilo recomendado de envío de formularios que se usa en las pantallas de autenticación del starter kit. Se indican action y method como props, y en la función children (render prop) se reciben errors y processing.

Uso básico

El children de <Form> es una función del tipo ({ errors, processing }) => JSX (patrón render prop). El componente Form calcula automáticamente esos valores y te los pasa. En los campos del formulario, en lugar de un handler onChange, se usa el atributo nativo name de HTML, y funciona la recolección estándar de datos de formulario del navegador.

Patrón del starter kit

El starter kit gestiona las rutas como objetos usando Wayfinder. store.form() devuelve un objeto que incluye action y method del objeto de ruta, y se aplica al <Form> con spread.
Los campos indicados en resetOnSuccess se resetean automáticamente al enviar con éxito. Se indican en campos que se quieren dejar vacíos tras el envío, como la contraseña.
Si no usas Wayfinder, pasando directamente la URL con action="/login" funciona igual.

Hook useForm

Para el procesamiento de formularios se usa el hook useForm de @inertiajs/react. La gestión del estado del formulario, el envío y la visualización de errores de validación se implementan de forma sencilla.

Lado del controlador

Componente de formulario React

Resumen de las principales propiedades del objeto que devuelve useForm. Cuando se devuelve un error de validación, useForm mantiene el contenido introducido y muestra el error.

Datos compartidos (Shared Data)

Los datos comunes a todas las páginas (información del usuario autenticado, mensajes flash, etc.) se definen en el método share() del middleware HandleInertiaRequests.
Para acceder a los datos compartidos desde un componente React se usa el hook usePage().
Como los datos compartidos se incluyen en todas las peticiones, se recomienda limitarlos al mínimo necesario. Si los pasas mediante una evaluación diferida con fn(), solo se evalúan cuando realmente se acceden.

Fundamentos de los hooks de React

Presentamos los hooks básicos de React que conviene conocer para desarrollar con Inertia × React.

useState — Gestión de estado local

useEffect — Procesamiento de efectos secundarios

useMemo y useCallback — Optimización de rendimiento


Soporte de TypeScript

La versión React de los starter kits usa TypeScript por defecto. Combinado con las definiciones de tipo de Inertia, se garantiza la seguridad de tipos de las props.

Definiciones de tipo globales

En los starter kits, los tipos de los datos compartidos se definen en resources/js/types/index.d.ts.

Uso de tipos en el componente de página


Conclusión

React saca su potencial al combinarse con Laravel, especialmente en la configuración de “monolito moderno” a través de Inertia. Su compatibilidad con TypeScript también es excelente, y encaja bien con el desarrollo de aplicaciones a gran escala. Con Inertia × React obtienes una experiencia de desarrollo que combina la sencillez del backend Laravel con el potente ecosistema de React. Si creas el proyecto con el starter kit, puedes empezar a desarrollar de inmediato con las pantallas de autenticación incluidas.

Documentación oficial de Inertia.js

Para todas las funcionalidades de Inertia v3, consulta la documentación oficial.
Última modificación el 13 de julio de 2026