当前位置: 首页 > article >正文

HashRouter和BrowserRouter对比

HashRouter(基于#号的路由)

路由工作原理

  • #号后的内容不会被浏览器发送给服务器,前端路由控制页面跳转

查询参数获取

  • 如果查询参数在#号前,如https://page.1688.com/?a=1#/home,需要使用window.location.search
const params = new URLSearchParams(window.location.search)
console.log(params.get('a)) 
  • 如果查询参数在#号后面,如http://page.1688.com/#/home?a=1
    可以使用useSearchParams钩子函数
import { useSearchParams } from 'react-router-dom';

const [searchParams] = useSearchParams();
console.log(searchParams.get('a')); // ✅ 解析 a

BrowserRouter(基于HTML5 History API 的路由)

路由工作原理

  • 依赖浏览器的History API(pushState / replaceState)
  • 更优雅,SEO友好,但是如果后端未配置,会导致刷新404

查询参数获取

直接使用useSearchParams或者使用window.location.search都可以

import { useSearchParams } from 'react-router-dom';

const [searchParams] = useSearchParams();
console.log(searchParams.get('a')); // ✅ 解析 a

const params = new URLSearchParams(window.location.search);
console.log(params.get('a')); // ✅ 解析 a

结论

  1. 如果是 HashRouter

    • 查询参数在 # 号前 → 用 window.location.search 解析

    • 查询参数在 # 号后 → 用 useSearchParams() 或手动解析 window.location.hash

    • 推荐 修改跳转 URL,使查询参数放在 #/home?a=1 位置,方便 useSearchParams 解析。

  2. 如果是 BrowserRouter

    • 直接用 useSearchParams() 或 window.location.search 解析,无需特殊处理。

    • 需要后端支持 URL 解析,否则刷新可能会 404。


http://www.kler.cn/a/598277.html

相关文章:

  • uni-app jyf-parser将字符串转化为html 和 rich-text
  • 数据分析处理库-Pandas
  • 理解操作系统(一)冯诺依曼结构和什么是操作系统
  • JavaSE1.0(基础语法之运算符)
  • 【spring对bean Singleton和Prototype的管理流程】
  • Java面试黄金宝典12
  • PyTorch 面试题及参考答案(精选100道)
  • 学习Flutter:搭建第一个 Flutter 应用
  • OpenCV图像拼接项目指南
  • AI:如何用 MeloSpyGUI 和 MeloSpySuite 生成爵士音乐文件
  • Android项目实战搭建 MVVM架构
  • 知识库已上线
  • 算法-动态规划总结
  • 20届智能车赛规则
  • 从零开始学习 Go 语言
  • go常用标准库学习笔记
  • VMWare虚拟机磁盘扩容
  • LabVIEW液压传动系统教学仿真平台
  • <svg>标签的优势,在绘制矢量图形时如何使用它
  • llama-factory 微调 Qwen2.5-3B-Instruct