Routing
在现代 web 应用程序中,路由是指根据当前 URL 或路径管理不同视图或组件之间导航的过程。在 webforJ 中,路由建立了一个复杂的框架,以实现 客户端导航,UI 更新动态发生,无需进行完整的页面重新加载,从而提高了应用的性能。
传统路由与客户端路由
在传统的服务器端路由中,当用户点击链接时,浏览器向服务器发送请求以获取新文档。服务器通过发送一个新的 HTML 页面进行响应,这迫使浏览器重新评估 CSS 和 JavaScript,重新渲染整个文档,并重置应用状态。这个循环引入了延迟和低效率,因为浏览器必须重新加载资源和页面状态。这个过程通常包含:
- 请求:用户导航到一个新 URL,触发了一个请求到服务器。
- 响应:服务器返回一个新的 HTML 文档以及相关资源(CSS、JS)。
- 渲染:浏览器重新渲染整个页面,通常会失去之前加载页面的状态。
这种方法可能导致性能瓶颈和次优的用户体验,因为需要重复的完整页面重新加载。
客户端路由在 webforJ 中通过直接在浏览器中启用导航解决了这个问题,动态更新 UI 而无需向服务器发送新的请求。以下是其工作原理:
- 单次初始请求:浏览器加载一次应用,包括所有必需的资源(HTML、CSS、JavaScript)。
- URL 管理:路由器监听 URL 更改并根据当前路由更新视图。
- 动态组件渲染:路由器将 URL 映射到一个组件并动态渲染,而无需刷新页面。
- 状态保持:应用状态在导航之间保持,确保视图之间的平滑过渡。
这种设计实现了 深度链接 和 基于 URL 的状态管理,允许用户在应用中书签和分享特定页面,同时享受顺畅的单页面体验。
核心原则
- 基于 URL 的组件映射:在 webforJ 中,路由直接与 UI 组件相关联。一个 URL 模式映射到一个特定组件,决定根据当前路径显示什么内容。
- 声明式路由:路由以声明的方式定义,通常使用注释。每个路由对应一个在匹配路由时渲染的组件。
- 动态导航:路由器动态切换视图而不重新加载页面,使应用保持响应快速。
webforJ 中的客户端路由示例
以下是为 UserProfileView
组件定义路由的示例,以根据 URL 中的 id
参数显示用户详细信息:
@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);
}
}
在这个设置中:
- 导航到
/user/john
将渲染UserProfileView
组件。 id
参数将从 URL 捕获john
,并允许你在组件中使用它来获取和显示用户数据。
主题
📄️ Routable Apps
在webforJ中,路由是一个可选工具。开发者可以选择使用webforJ路由解决方案或一个传统模型,该模型通过Frame操作且不支持深度链接。要启用路由,必须在实现App的类级别应用@Routify注解。这赋予了webforJ管理浏览器历史记录、响应导航事件并根据URL渲染应用组件的权利。
📄️ Defining Routes
定义路由对于将 URL 映射到特定组件是至关重要的。这使您能够根据 URL 结构控制 UI 的不同部分如何渲染。该框架使用 @Route 注释使此过程声明式和简单,从而减少手动配置的需要。
📄️ Route Navigation
在 webforJ 中,通过路由导航是根据用户操作或 URL 更改切 换视图和组件的核心机制。导航允许用户在应用的不同部分之间无缝移动,而无需刷新页面。此客户端导航使应用保持响应迅速和平滑,同时保持应用的状态。
📄️ Route Patterns
路由模式用于定义URL如何映射到特定视图,包括动态和可选片段、正则表达式和通配符。路由模式使框架能够匹配URL、提取参数以及动态生成URL。它们在根据浏览器的位置结构化应用程序的导航和组件渲染方面起着关键作用。
📄️ Query Parameters
查询参数允许您通过 URL 传递附加数据,使用格式 ?key1=value1&key2=value2。而路由参数用于在 URL 路径中传递必需的数据,查询参数则提供了一种灵活的机制来传递可选或附加数据。当过滤内容、排序或处理同一键的多 个值时,它们特别有用。
📄️ State Management
创建无缝且动态的用户体验通常要求将您的网络应用的状态反映在 URL 中,并在浏览器导航事件之间保留这些状态。您可以通过利用 URL 参数更新和浏览器历史状态管理来实现这一点,而无需重新加载页面。这确保用户可以分享、书签或返回特定视图,应用程序完全了解他们之前的交互。
🗃️ 导航生命周期
1 项
🗃️ 路由层级
1 项
📄️ Navigational Frame Titles
在webforJ中,所有路由都在一个框架中呈现,该框架充当顶级容器,负责显示当前路由的内容。当用户在不同路由之间导航时,框架标题会动态更新,以反映活动视图,从而帮助提供用户在应用程序中的当前位置的清晰上下文。
📄️ Routes Registration
除了使用 @Route 注释 注册路由 外,还可以根据应用逻辑、用户角色或其他条件,在运行时动态注册、更新或删除路由。这样的灵活性使您能够更动态地管理导航,而不是在编译时静态地定义路由。