失败处理|嵌套路由|Link 组件
失败处理(自定义)
- 失败处理:当路由匹配不到任何路径时,会触发失败处理
bash
src
├── error.jsx
(1) 新建 error.jsx
jsx
function ErrorPage() {
return (
<div>
<h1>404 Not Found</h1>
</div>
);
}
export default ErrorPage;
(2) 绑定到路由上面
- router.jsx 里面修改
jsx
import React from "react";
import { createBrowserRouter } from "react-router-dom";
import ErrorPage from "../error";
const router = createBrowserRouter([
// 2. 路由配置
{
path: "/",
element: <h1>欢迎你,ReactRouter</h1>,
errorElement: <ErrorPage></ErrorPage>,
},
]);
export default router;
嵌套路由
- 嵌套路由:路由里面嵌套路由,子路由
bash
src
├── layOut
│ ├── Layout.jsx
├── views
│ ├── index.jsx
│ ├── Page1.jsx
│ ├── Page2.jsx
LayOut.jsx
- Outlet 组件:用于渲染子路由
jsx
import { Outlet } from "react-router-dom";
function LayOut() {
return (
<div>
<h1>Layout</h1>
<p>这是Layout组件</p>
<div>-------下面是子路由----------</div>
<Outlet />
</div>
);
}
export default LayOut;
index.jsx|Page1.jsx|Page2.jsx
- 默认页面
jsx
function IndexPage() {
return <div>默认页面</div>;
}
export default IndexPage;
- Page1.jsx
jsx
function Page1() {
const gotourl = () => {
console.log("跳转到路由2");
};
const gotourlcanshu = () => {
console.log("携带参数跳转到路由2");
};
return (
<div>
路由1的页面
<button onClick={gotourl}>跳转到路由2</button>
<button onClick={gotourlcanshu}>携带参数跳转到路由2</button>
</div>
);
}
export default Page1;
- Page2.jsx
jsx
function Page2() {
const gotourl = () => {
console.log("跳转到路由1");
};
const gotourlcanshu = () => {
console.log("携带参数跳转到路由1");
};
return (
<div>
路由1的页面
<button onClick={gotourl}>跳转到路由2</button>
<button onClick={gotourlcanshu}>携带参数跳转到路由2</button>
</div>
);
}
export default Page2;
Router.jsx
修改 router.jsx
jsx
import React from "react";
import { createBrowserRouter } from "react-router-dom";
import ErrorPage from "../error";
import LayOut from "../layOut/Layout";
import Page1 from "../views/Page1";
import Page2 from "../views/Page2";
// 默认页面
import IndexPage from "../views/index";
const router = createBrowserRouter([
// 2. 路由配置
{
path: "/",
element: <LayOut></LayOut>,
errorElement: <ErrorPage></ErrorPage>,
children: [
{
index: true,
element: <IndexPage></IndexPage>,
},
{
path: "/page1",
element: <Page1></Page1>,
},
{
path: "/page2",
element: <Page2></Page2>,
},
],
},
]);
export default router;
跳转路由
Link 组件:用于跳转路由 但是获取不到样式
NavLink 组件:用于跳转路由 获取到样式,并且可以自定义样式
方法
Link
jsx
<Link to={`/page1`}>link跳转到page1</Link>
NavLink
JSX
<NavLink
to={`/page1`}
className={({ isActive, isPending }) =>
isActive ? "active" : isPending ? "pending" : ""
}
>
NavLink点击我跳转
</NavLink>
方法跳转
- useNavigate
jsx
// 跳转函数
const navigate = useNavigate();
const gotourl = () => {
console.log("跳转到路由2");
navigate(`/page2`);
};