Routing
En las aplicaciones web modernas, rutear se refiere al proceso de gestión de la navegación entre diferentes vistas o componentes según la URL o ruta actual. En webforJ, el enrutamiento establece un marco sofisticado para la navegación del lado del cliente, donde las actualizaciones de la interfaz de usuario ocurren dinámicamente sin requerir recargas completas de la página, mejorando el rendimiento de tu aplicación.
Enrutamiento tradicional vs del lado del cliente
En el enrutamiento tradicional del lado del servidor, cuando un usuario hace clic en un enlace, el navegador envía una solicitud al servidor para un nuevo documento. El servidor responde enviando una nueva página HTML, lo que obliga al navegador a reevaluar el CSS y el JavaScript, volver a renderizar todo el documento y restablecer el estado de la aplicación. Este ciclo introduce retrasos e ineficiencias, ya que el navegador debe volver a cargar recursos y el estado de la página. El proceso generalmente implica:
- Solicitud: El usuario navega a una nueva URL, lo que desencadena una solicitud al servidor.
- Respuesta: El servidor envía de vuelta un nuevo documento HTML junto con activos relacionados (CSS, JS).
- Renderización: El navegador vuelve a renderizar toda la página, a menudo perdiendo el estado de las páginas cargadas anteriormente.
Este enfoque puede llevar a cuellos de botella en el rendimiento y experiencias de usuario subóptimas debido a recargas completas de página repetitivas.
El enrutamiento del lado del cliente en webforJ resuelve esto al permitir la navegación directamente en el navegador, actualizando dinámicamente la interfaz de usuario sin enviar una nueva solicitud al servidor. Así es como funciona:
- Solicitud inicial única: El navegador carga la aplicación una vez, incluyendo todos los activos necesarios (HTML, CSS, JavaScript).
- Gestión de URLs: El enrutador escucha los cambios de URL y actualiza la vista según la ruta actual.
- Renderización dinámica de componentes: El enrutador mapea la URL a un componente y lo renderiza dinámicamente, sin refrescar la página.
- Preservación del estado: El estado de la aplicación se mantiene entre navegaciones, asegurando una transición suave entre vistas.
Este diseño permite enlaces profundos y gestión de estado basada en URLs, permitiendo a los usuarios marcar y compartir páginas específicas dentro de la aplicación mientras disfrutan de una experiencia fluida de una sola página.
Principios fundamentales
- Mapeo de componentes basado en URL: En webforJ, las rutas están directamente vinculadas a los componentes de la interfaz de usuario. Un patrón de URL se asigna a un componente específico, dictando qué contenido se muestra según la ruta actual.
- Enrutamiento declarativo: Las rutas se definen de forma declarativa, típicamente usando anotaciones. Cada ruta corresponde a un componente que se renderiza cuando se coincide con la ruta.
- Navegación dinámica: El enrutador cambia dinámicamente entre vistas sin recargar la página, manteniendo la aplicación receptiva y rápida.
Ejemplo de enrutamiento del lado del cliente en webforJ
Aquí tienes un ejemplo de cómo definir una ruta para un componente UserProfileView
para mostrar detalles del usuario según el parámetro id
en la URL:
@Route(value = "user/:id")
public class UserProfileView extends Composite<Div> implements DidEnterObserver {
@Override
public void onDidEnter(DidEnterEvent event, ParametersBag parameters) {
String id = parameters.getAlpha("id").orElse("");
refreshProfile(id);
}
}
En esta configuración:
- Navegar a
/user/john
renderizaría el componenteUserProfileView
. - El parámetro
id
capturaríajohn
de la URL y te permitiría usarlo dentro del componente para obtener y mostrar los datos del usuario.
Temas
📄️ Routable Apps
El enrutamiento en webforJ es una herramienta opcional. Los desarrolladores pueden elegir entre la solución de enrutamiento de webforJ o un modelo tradicional con manipulación de Frame y sin enlaces profundos. Para habilitar el enrutamiento, se debe aplicar la anotación @Routify a nivel de la clase que implementa App. Esto otorga a webforJ la autoridad para gestionar el historial del navegador, responder a eventos de navegación y renderizar los componentes de la aplicación según la URL.
📄️ Defining Routes
Definir rutas es esencial para mapear URLs a componentes específicos. Esto te permite controlar cómo se representan las diferentes partes de tu interfaz de usuario según la estructura de la URL. El framework utiliza la anotación @Route para hacer que este proceso sea declarativo y sencillo, reduciendo la necesidad de configuración manual.
📄️ Route Navigation
En webforJ, navegar entre rutas es el mecanismo central para cambiar vistas y componentes según las acciones del usuario o los cambios en la URL. La navegación permite a los usuarios moverse sin problemas entre diferentes partes de la aplicación sin refrescar la página. Esta navegación del lado del cliente mantiene la aplicación receptiva y fluida, preservando el estado de la aplicación.
📄️ Route Patterns
Los Patrones de Ruta se utilizan para definir cómo las URL se mapean a vistas específicas, incluyendo segmentos dinámicos y opcionales, expresiones regulares y comodines. Los patrones de ruta permiten al marco de trabajo hacer coincidir URL, extraer parámetros y generar URL dinámicamente. Juegan un papel crítico en la estructuración de la navegación y el renderizado de componentes de una aplicación según la ubicación del navegador.
📄️ Query Parameters
Los parámetros de consulta te permiten pasar datos adicionales a través de las URL, utilizando el formato ?key1=value1&key2=value2. Mientras que los parámetros de ruta se utilizan para pasar datos requeridos dentro de la ruta de la URL, los parámetros de consulta proporcionan un mecanismo flexible para pasar datos opcionales o adicionales. Son especialmente útiles al filtrar contenido, ordenar o manejar múltiples valores para la misma clave.
📄️ State Management
Crear experiencias de usuario dinámicas y fluidas a menudo requiere que el estado de tu aplicación web se refleje en la URL y se mantenga a través de eventos de navegación del navegador. Puedes lograr esto sin recargar la página aprovechando las actualizaciones de parámetros de URL y la gestión del estado del historial del navegador. Esto asegura que los usuarios puedan compartir, marcar o regresar a vistas específicas con la aplicación plenamente consciente de sus interacciones previas.
🗃️ Ciclo de Navegación
3 artículos
🗃️ Jerarquía de Rutas
3 artículos
📄️ Navigational Frame Titles
En webforJ, todas las rutas se renderizan dentro de un Frame, que sirve como un contenedor de nivel superior responsable de mostrar el contenido de la ruta actual. A medida que los usuarios navegan entre diferentes rutas, el Título del Frame se actualiza dinámicamente para reflejar la vista activa, ayudando a proporcionar un contexto claro sobre la ubicación actual del usuario dentro de la aplicación.
📄️ Routes Registration
Además de registrar rutas usando las anotaciones @Route, es posible registrar, actualizar o eliminar rutas de manera dinámica en tiempo de ejecución según la lógica de la aplicación, los roles de usuario u otras condiciones. Esta flexibilidad te permite gestionar la navegación de manera más dinámica, en lugar de definir rutas de forma estática en tiempo de compilación.