路由
SPA
单页Web应用(single page web application,SPA)。
整个应用只有一个完整的页面。
点击页面中的链接不会刷新页面,只会做页面的局部更新。
数据都需要通过ajax请求获取, 并在前端异步展现。
路由的作用
一个路由就是一个k(路径)与v(方法/组件)的映射关系,主要用于实现SPA应用。
路由分类:
后端路由。比如javaweb路径映射对应的servlet
前端路由
浏览器端路由,value是component,用于展示页面内容
注册路由:
<Route path="/test" component={Test}>工作过程:当浏览器的path变为/test时, 当前路由组件就会变为Test组件
基本原理:
触发事件修改浏览器地址
内部监听到浏览器地址发生变化
根据路径对对应的组件进行更新
路由组件与一般组件
写法不同
一般组件:
<Demo />路由组件:
<Route path="/about" component={About}/>
项目位置不同
一般组件:
src/components路由组件:
src/pages
props属性不同一般组件,传递什么props,组件接收的到的就是什么
路由组件,固定接收三个props:
使用react-router-dom
Link 路由链接
功能:由链接跳转到指定的组件
配置路由器,要想路由生效,必须配置路由器,并且同一应用要使用同一路由器
BrowserRouter, 通过H5的histroy对象操作历史记录完成HashRouter,通过锚点#完成
编写路由链接
<Link/>注册路由
Link最终会被转换为HTML的a标签
NavLink 导航路由链接
Link组件不能增加任何的点击事件,可以使用升级版NavLink。如果指定的NavLink被触发了点击事件,那么就会默认给NavLink上增加一个active的样式类名,从而增加了点击效果
点击了该路由,会变为:
或者通过activeClassName属性,修改要增加的样式类名:
可以封装NavLink组件,减少代码
Switch 单一匹配
通常情况下,path和component是一一对应的关系
当出现一个path对应多个component时,会匹配并展示所有匹配的component
Switch可以提高路由效率,单一匹配
模糊匹配与精准匹配
默认为模糊匹配(输入路径必须包含路由路径):
开启精准匹配(不推荐):
Redirect 路由重定向
当所有的路由都匹配不上,就会重定向到Redirect定义的路径上:
多级路由
在父路由组件下新建文件夹再定义路由
定义子路由path时要带上父路由的path
路由传参
params参数
注册路由并声明接收
路由链接携带参数
接收参数
最后会落实到
url path params参数上,所以称为params参数
search参数
注册路由无需声明参数
路由链接携带参数
接收参数
state 参数
这个state参数不是组件的state
注册路由无需声明参数
路由链接携带参数
接收参数
push和replace
push和replace编程式路由
当路由时间不可以由人触发时,Link和NavLink就无法生效,所以借助路由组件的props.history对象的api进行操作,让路由组件中的普通组件可以触发相应的路由操作。
注意,只有路由组件有history对象
withRouter 普通组件操作路由
只有路由组件有history对象,一般组件需要通过withRouter函数:
最后更新于
这有帮助吗?