- Link,react-router-dom
- history
- push
- replace
- use
- location.href
- window.open
- 动态 a 标签
<Link to={`/user/${item.id}`}>用户详情</Link>// to 不传参<Link replace to='/user/detail/'>信息</Link>// 标签式跳转 params传参<Link replace to='/user/23'>信息</Link>history.push("/user/detail")// state传参history.push("/user/detail",{id: 1,title:"信息1"})history.replace("/user/detail")// state传参history.replace("/user/detail",{id: 1,title:"信息1"})// 返回,后退 history.go(-1)history.goBack()// 前进 history.go(1)history.goForward()window.location.href = url;window.open(url)export function elementA(url: string) {const $a = document.createElement('a');$a.setAttribute('href', url);$a.click();}
Link
用Link组件替代 a标签
Link组件是react路由中提供的声明式组件,可以区分路由的模式来实现路由的跳转
<Link to={'/home'}>首页</Link><Link to={`/profile/${user.id}`}>个人中心</Link>// 获取 id this.props.match.params.id
from to
二级导航就是在某个一级路由中继续嵌套路由
/user 一级路由
/user/list 二级路由
路由名字重复问题:
如果多次点击相同路由时会触发Hash history cannot PUSH the same path;的警告
import UserList from './UserList'import UserAdd from './UserAdd'function App() {return (<div><ul className="nav nav-stacked"><li><Link to='/user/list'>用户列表</Link></li><li><Link to='/user/add'>增加用户</Link></li></ul><Route path="/user/list" component={UserList}/><Route path="/user/add" component={UserAdd}/></div>)}
MenuLink
替换掉原有的Link组件,并且在内部进行判断是否增加激活状态
import React from 'react';import {Route,Link} from 'react-router-dom'export default ({to,label})=> {return <Route children={(props)=><li className={props.match?'active':''}><Link to={to}>{label}</Link></li>}/>}
children属性:无论路由是否匹配到,都会执行此函数
render只要在匹配到后才会执行
