- 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只要在匹配到后才会执行