React路由(三)

React路由(三)

一、路由的严格匹配与模糊匹配

1、默认使用的是模糊匹配

2、开启严格匹配,添加"exact"关键字

javascript 复制代码
<Route exact path="/home" element={Home} />

3、严格匹配不要随便开启,有些时候开启会导致无法匹配二级路由

二、解决多级路径刷新页面样式丢失问题

1、public/index.html中引入样式时,不写"./",而写"/",但是在嵌套二级路由时行不通

2、public/index.htm中引入样式,改写为"%PUBLIC_URL%",比较通用的做法

3、使用标签包裹,但是不常用,路径会携带"#"

三、Redirect的使用

1、一般写在所有路由注册的最下方,当所有路由都无法匹配时,跳转到Redirect指定的路由

2、具体实现

javascript 复制代码
<Routes>
	<Route path='/home' element={Home} />
	<Route path='/about' element={About} />
	<Redirect to='/home' />
</Routes>

四、嵌套路由

1、注册子路由时要写上父路由的path值

2、路由的匹配是按照注册路由的顺序进行的

五、路由组件传参(react-router-dom 5+版本)

1、params参数

复制代码
1.1 路由链接: <Link to="/demo/test/tom/18" />
1.2 注册路由: <Route path="/demo/test/:name/:age" / elemet={Test}>
1.3 接收参数: const {name, age} = this.props.match.params

2、search参数

复制代码
2.1 路由链接: <Link to="/demo/test?name=tom&age=18" />
2.2 注册路由(无需声明,正常注册): <Route path="/demo/test" element={Test} />
2.3 接收参数: const { search } = this.props.location
2.4 **备注: 获取到的search是urlencode编码字符串,需要借助querystring/qs-js库解析**

3、state参数

复制代码
3.1 路由链接: <Link to={pathname: '/demo/test', state: {name: 'tom', age: 18}} />
3.2 注册路由: <Route path="/demo/test" element={Test} />
3.3 接收参数: this.props.location.state
3.4 **备注: 刷新页面也可以保留参数**

六、编程式路由导航

定义: 借助this.props.history对象上的API对操作路由跳转、前进、后退

javascript 复制代码
// 推送
history.push('/home')
// 替换
history.replace('/home')
// 后退
history.goBack()
// 前进
history.goForward()
// 输入负值为后退,正值为前进,0则为停留当前页面
history.go(0)

七、BrowerRouter与HashRouter的区别

1、底层原理

BrowerRouter使用的是H5的history API,不兼容IE9及以下版本;HashRouter使用的是URL的哈希值

2、URL表现形式

BrowerRouter的路径中没有"#";HashRouter中则有"#",例如: http://localhost:3000/#/demo/test

3、刷新后对路由state参数影响

BrowerRouter没有任何影响,因为state参数保存在history对象中;HashRouter刷新后导致路由state参数丢失,因为history.location对象中state会变成undefined

4、备注

HashRouter可以用于解决一些路径错误相关问题

相关推荐
小林ixn8 小时前
深入 React useState:从闭包陷阱到性能优化的完整指南
react.js·性能优化
shawxlee9 小时前
vue3在public下封装config.js自定义配置动态数据,可在打包后直接修改,方便后端部署及后续维护
前端·javascript·经验分享·vue·团队开发·js·项目优化
触底反弹10 小时前
🚀 从 DOM0 级到 React 合成事件:前端事件监听的 20 年演进史
前端·react.js·面试
kyriewen10 小时前
我给前端项目的接口请求套了6层保护——才发现以前一直在裸奔
前端·javascript·面试
郝亚军12 小时前
如何安装webstorm、Node.js和vue CLI
前端·javascript·vue.js
an3174213 小时前
6MB 组织树大文件性能优化全流程
前端·javascript·vue.js
GitLqr13 小时前
Vue 3.6 Vapor Mode vs React 19 Compiler:前端架构的两条分叉路
vue.js·react.js·vapor
TeamDev14 小时前
JxBrowser 9.3.1 版本发布啦!
java·前端·javascript·c#·混合应用·jxbrowser·浏览器控件
整點薯條15 小时前
Vue3+vite创建项目架构文件说明总结
前端·javascript·vue.js
前端甜糖16 小时前
记录We码开发者工具的一个bug
前端·javascript