跳到正文

前端路由

Client-side Routing

中级通用

前端路由(Client-side Routing)是由浏览器中的代码根据网址决定显示哪个页面的机制。它让网站切换页面时不必每次都向服务器请求整页,也能让用户通过网址直达某个页面,例如直接打开后台的订单详情。

你可能会说:「我想让后台切换页面时不整页刷新,而且复制订单详情的网址给同事后,他也能直接打开。」

读之前建议先了解

动手看看

● ● ●
shop.example.com/admin/orders
shop.example.com/admin/orders/2048
订单管理
订单列表
订单 #2048
订单列表
#2048 · 林女士已付款 · ¥268.00
#2047 · 陈先生待付款 · ¥89.00
订单 #2048
林女士 · 已付款帆布托特包 × 2 · 合计 ¥268.00
配送信息上海市徐汇区 · 顺丰快递
切换页面时的请求记录
GET /api/orders/2048 · JSON 数据没有重新请求整页 HTML
GET /api/orders · JSON 数据没有重新请求整页 HTML
GET /admin/orders/2048 · 整页 HTML浏览器重新加载了页面
GET /admin/orders · 整页 HTML浏览器重新加载了页面
模拟点击页面链接
路由方式

用「模拟点击页面链接」切换列表和详情,观察网址、页面内容与请求记录一起变化;也可以悬停或用 Tab 聚焦左侧入口。

前端路由由浏览器里的代码按网址换页面。这里可以请求订单数据,但切换时不必重新下载整页 HTML。

详情页有独立网址,所以别人也能直接打开 /admin/orders/2048;首次直达时仍需加载网站,前端路由省的是站内切换时反复请求整页。

要点

  1. 1

    网址路径对应页面内容

    你打开后台的订单列表和某笔订单详情时,前端路由会读取当前网址,把不同路径匹配到对应的页面组件。这样即使共用一套应用界面,两个页面仍有各自可分享的网址。

  2. 2

    切换页面同步更新网址

    点击站内导航后,路由可以更新浏览器地址并显示新页面,而不重新加载整份网页。因为网址也变了,用户通常还能用浏览器的返回、前进按钮回到刚才看的页面。

  3. 3

    直接访问还要服务器配合

    站内点击能打开详情页,不代表刷新详情页网址也能打开。刷新或粘贴网址时,请求会先到服务器;服务器需要返回应用入口,再由前端识别路径,否则可能出现找不到页面。

容易混淆的地方

它和服务端路由的区别在于:前端路由主要由浏览器中的代码决定显示什么,服务端路由由服务器处理请求并决定返回什么;两者可以配合使用。它也不等于锚点跳转:锚点通常只是把你带到同一页的某个位置,不是在应用中切换到另一个页面。

什么时候用

适合用

  • 做一个有订单列表、订单详情和设置页的管理后台,希望切换时保留应用界面,并让每页有独立网址。
  • 做 AI 工具时,想让用户复制某次对话的网址发给同事,打开后直接进入对应的对话页面。
  • 做多页面的产品原型,想验证导航、浏览器返回和直接打开子页面是否符合实际使用习惯。

不适合用

  • 网站只有一篇长介绍,点击目录只是滚动到本页不同段落;用锚点链接就能解决。
  • 点击一个控件只是在当前页面展开详情或切换局部内容,不需要独立网址;用组件状态更直接。
  • 网站只有少量彼此独立的静态页面,而且接受每次跳转都加载新页面;普通链接和多页网站就够了。

练一练

你给管理后台加了前端路由:站内点击能进入「/orders/42」,但复制这个网址到新标签页却显示服务器的 404。接下来怎么处理最贴近问题根源?

让 AI 帮你做

请为这个管理后台实现前端路由:订单列表用 /orders,详情用 /orders/:id,设置页用 /settings。站内导航切换时更新网址并支持浏览器返回;检查直接打开或刷新子页面时的服务器回退配置,并给出验证步骤。

接下来学什么