JavaScript动态路由核心是根据URL可变路径自动提取参数并渲染内容,需理解匹配逻辑:定义带占位符路径(如/user/:id)、正则提取参数、控制优先级(静态→动态→通配)、结合History API监听跳转与刷新。
JavaScript动态路由的核心,是让前端能根据URL路径中的可变部分(比如 /user/123 中的 123)自动提取参数、匹配规则并渲染对应内容,而不是把每条路径都硬编码成静态配置。
关键不在“写多少代码”,而在理解匹配逻辑和参数提取机制:
/user/:id、/posts/:category/:slug,其中 :id 是命名参数,* 或 ... 可表示通配段/user/(\\d+)),再对当前 location.pathname 或 location.hash.slice(1) 执行 .match(),把捕获组映射为对象:{ id: '123' }
/login),再匹配带参数的动态路径(/user/:id),最后兜底通配路径(/*),避免误判history.pushState({path}, '', '/user/123'),监听 popstate 事件触发重新匹配;首次加载也要手动执行一次匹配,否则刷新页面会白屏实际项目中不建议从零手写完整路由系统,成熟方案已覆盖绝大多数场景:
} /> 声明,组件内用 useParams() 拿参数;支持嵌套路由、懒加载、路由守卫(element 可包裹验证逻辑)routes 配置中写 { path: '/article/:id', component: Article },组件内通过 useRoute().params.id 获取;支持命名视图、滚动行为、路由元信息(meta)控制权限app/user/[id]/page.tsx 自动对应 /user/123,参数直接解构 { params }: { params: { id: string } };还支持 [...slug] 多段捕获、[[id]] 可选参数如果不用大框架,又需要比原生 API 更可靠的路由能力,这几个库值得考虑:
useRoutes 和 Link
History 模式下,用户直接访问 /user/123 会向服务器发起真实请求。若后端没配置 fallback,就会返回 404:
location / { try_files $uri $uri/ /index.html; }
server.historyApiFallback: true
app.get('*', (req, res) => res.sendFile(path.join(__dirname, 'index.html')));