URL的hash
- 前端路由是如何做到URL和内容进行映射的呢?
- 监听URL的改变
- URL的hash
- URL的hash也就是锚点(#),本质上是改变window.location的href属性
- 我们可以通过直接赋值location.hash来改变href,但是页面不发生刷新
hashchange
- hash的优势就是兼容性更好,在老版本IE中都可以运行,但是缺陷是有一个#,显得不像一个真实的路径
HTML5的History
- history接口是HTML5新增的,它有六种模式改变URL而不刷新页面
- replaceState:替换原来的路径
- pushState:使用新的路径
- popState:路径的回退
- go:向前或者向后改变路径
- forward:向前改变路径
- back:向后改变路径
react-router
react-router-dom
- 提供了一些组件
- BrowserRouter
- HashRouter
- 提供了一些组件
1 | root.render( |
- 路由映射配置
- Routes:包裹所有的Route,在其中匹配一个路由
- Router5.x使用的是Switch组件
- Route:Route用于路径的匹配
- path属性:用于设置匹配到的路径
- element属性:设置匹配到路径后,渲染的组件
- Route5.x使用的是component属性
- exact:精准匹配,只有精准匹配到完全一直的路径,才会渲染对应的组件
- Router6.x不再支持该属性
- Routes:包裹所有的Route,在其中匹配一个路由
- 路由配置和跳转
- Link和NavLink
- 通常路径的跳转是使用Link组件,最终会被渲染成a元素
- NavLink是在Link基础之上增加了一些样式属性
- to属性:Link中用于设置跳转的路径
- Link和NavLink
1 | <Routes> |
- Navigate导航
- Navigate用于路由的重定向,当这个组件出现时,就会执行跳转到对应的to路径中
1 | { !isLogin |
- 路由的嵌套
1 | <Route path="/home" element={<Home />}> |
- 高阶组件:函数
1 | function withRouter(WrapperComponent){ |
- 路由配置
1 | // router/index.js |
- 路由懒加载
1 | const About = React.lazy(()=>import("../pages/About")) |