使用useNavigate替代了useHistory用来跳转路由并能传递参数
因为v6移出了WithRouter,所以组件的props不能直接拿到history,location,match;所以v6在v5的基础上添加了一些新的hooks便于我们对于路由值传递(useParams,useLocation,useSearchParams)
1、通过search与state传递的参数我们可以通过useLocation()对象中获取;
const {state,search} = useLocation()
2、search传递的参数是最后接收的结果是查询字符串?id=xx&name=xxx;可以通过useSearchParams()中的方法来获取其search参数值;
import { useSearchParams} from 'react-router-dom'
const [searchParams, setSearchParams] = useSearchParams();
console.log('searchParams',searchParams.get("id"))
3、通过params动态路由的方式传递的参数,使用useParams()可以获取,其直接是个对象;
const {xxx} = useParams()
创建一个router文件,导出配置路由表
创建路由映射表
export default [
{
path: '/',
element: <Navigate to="/login" />
},
{
path: '/login',
element: <Login />
},
{
path: '/main/:hjg',
element: <Main />,
children: [
{
index: true,
element: <Navigate to="default" />
},
{
path: 'default',
element: <MainDefault />
},
{
path: 'docmanage',
element: <DocManage />,
},
{
path: 'docteam',
element: <DocTeam />
},
{
path: 'join',
element: <Join />
}
]
},
{
path: '*',
element: <Page404 />
},
]
import React from "react";
import {useRoutes} from "react-router-dom"
import routes from './router' //引入路由表
import './App.css'
function App() {
const element = useRoutes(routes) //使用useRoutes()生成 }>结构
return (
<>
{element}//使用路由表
</>
);
}
export default App;
子路由的显示位置,配合Link与NavLink显示子路由页面位置
<>
<Title level={4}>家庭医生管理</Title>
<ul>
<li><NavLink
to="/main/docmanage/add"
activeClassName='active'
isActive={(match, location) => {
console.log(match, location)
if (match.url ||match === null) {
return true
}
}}
>增加</NavLink></li>
<li><NavLink to="/main/docmanage/del" activeStyle={{ backgroundColor: 'pink', color: 'white' }}>删除</NavLink></li>
<li><NavLink to="/main/docmanage/look">查看</NavLink></li>
<li><NavLink to="/main/docmanage/modify">修改</NavLink></li>
</ul>
{/* 三级路由 */}
<Outlet></Outlet>
</>