当前位置: 首页 > news >正文

react【六】 React-Router 路由

文章目录

  • 1、Router
    • 1.1 路由
    • 1.2 认识React-Router
    • 1.3 Link和NavLink
    • 1.4 Navigate
    • 1.5 Not Found页面配置
    • 1.6 路由的嵌套
    • 1.7 手动路由的跳转
      • 1.7.1 在函数式组件中使用hook
      • 1.7.2 在类组件中封装高阶组件
    • 1.8 动态路由传递参数
    • 1.9 路由的配置文件以及懒加载

1、Router

1.1 路由

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2 认识React-Router

npm install react-router-dom

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.3 Link和NavLink

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

1.4 Navigate

在这里插入图片描述

import React, { PureComponent } from "react";
import { Navigate } from "react-router-dom";export class Login extends PureComponent {constructor(props) {super(props);this.state = {isLogin: false,};}login() {this.setState({ isLogin: true });}render() {const { isLogin } = this.state;return (<div><h1>Login Page</h1>{/* 如果没有登录的话显示登录按钮已经登录则跳转到/home页面 */}{!isLogin ? (<button onClick={(e) => this.login()}>登录</button>) : (<Navigate to="/home" />)}</div>);}
}export default Login;

1.5 Not Found页面配置

在这里插入图片描述

      <Routes><Route path="*" element={<NotFound />} /></Routes>

1.6 路由的嵌套

在这里插入图片描述

1.7 手动路由的跳转

在这里插入图片描述

1.7.1 在函数式组件中使用hook

在这里插入图片描述

1.7.2 在类组件中封装高阶组件

在这里插入图片描述
在这里插入图片描述

1.8 动态路由传递参数

在这里插入图片描述

  • hoc
import {useLocation,useNavigate,useParams,useSearchParams,
} from "react-router-dom";const withRouter = (WrapperComponent) => {return (props) => {// 1.导航const navigate = useNavigate();// 2.动态路由的参数 :/detail/:idconst params = useParams();// 3.查询字符串的参数: /user?name=why&age=18const location = useLocation();const [searchParams] = useSearchParams();const query = Object.fromEntries(searchParams);// Object.fromEntries([//   ["a", "b"],//   ["c", "d"],// ]);//Object{a:"b", c:"d"}const router = { navigate, params, location, query };return <WrapperComponent {...props} router={router} />;};
};export default withRouter;

在这里插入图片描述

import React, { PureComponent } from 'react'
import { withRouter } from '../hoc'export class Detail extends PureComponent {render() {const { router } = this.propsconst { params } = routerreturn (<div><h1>Detail Page</h1><h2>id: {params.id}</h2></div>)}
}export default withRouter(Detail)

在这里插入图片描述

import React, { PureComponent } from 'react'
import { withRouter } from '../hoc'export class User extends PureComponent {render() {const { router } = this.propsconst { query } = routerreturn (<div><h1>User: {query.name}-{query.age}</h1></div>)}
}export default withRouter(User)

1.9 路由的配置文件以及懒加载

在这里插入图片描述

import Home from "../pages/Home";
import HomeRecommend from "../pages/HomeRecommend";
import HomeRanking from "../pages/HomeRanking";
import HomeSongMenu from "../pages/HomeSongMenu";
// import About from "../pages/About"
// import Login from "../pages/Login"
import Category from "../pages/Category";
import Order from "../pages/Order";
import NotFound from "../pages/NotFound";
import Detail from "../pages/Detail";
import User from "../pages/User";
import { Navigate } from "react-router-dom";
import React from "react";// import 返回的是一个Promise
const About = React.lazy(() => import("../pages/About"));
const Login = React.lazy(() => import("../pages/Login"));const routes = [{path: "/",// 重定向element: <Navigate to="/home" />,},{path: "/home",element: <Home />,children: [// 子路由{path: "/home",element: <Navigate to="/home/recommend" />,},{path: "/home/recommend",element: <HomeRecommend />,},{path: "/home/ranking",element: <HomeRanking />,},{path: "/home/songmenu",element: <HomeSongMenu />,},],},{path: "/about",element: <About />,},{path: "/login",element: <Login />,},{path: "/category",element: <Category />,},{path: "/order",element: <Order />,},{path: "/detail/:id",element: <Detail />,},{path: "/user",element: <User />,},{path: "*",element: <NotFound />,},
];export default routes;

在这里插入图片描述

// import { StrictMode } from "react"
import ReactDOM from "react-dom/client";
import App from "./App";
import { HashRouter } from "react-router-dom";
import { Suspense } from "react";const root = ReactDOM.createRoot(document.querySelector("#root"));
root.render(// <StrictMode><HashRouter>// 需要加上Suspense 如果数据js 和 css文件还没请求回来就显示这里的内容<Suspense fallback={<h3>Loading...</h3>}><App /></Suspense></HashRouter>// </StrictMode>
);
http://www.lryc.cn/news/302777.html

相关文章:

  • AUTOSAR CP--chapter7从CAN网络学习Autosar通信
  • NX/UG二次开发—CAM—平面铣边界准确设置方法
  • 网络安全综合实验
  • QT-地形3D
  • C++拷贝构造函数与赋值运算符重载
  • 全球各国海外媒体发稿新闻营销推广,英美德意法俄日韩多语言
  • 将phantomjs制成docker镜像
  • 【LeetCode+JavaGuide打卡】Day20|530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先
  • 【工具类】开源照片管理工具pthtoprism
  • [ linux网络 ] 网关服务器搭建,综合应用SNAT、DNAT转换,dhcp分配、dns分离解析,nfs网络共享以及ssh免密登录
  • MySQL全量备份
  • 【Linux系统化学习】动静态库 | 软硬链接
  • linux-firewalld防火墙端口转发
  • adobe软件提示This non-genuine Adobe app will be disabled soon【软件版本】
  • python coding with ChatGPT 打卡第20天| 二叉搜索树:搜索、验证、最小绝对差、众数
  • Stable Diffusion——基础模型、VAE、LORA、Embedding各个模型的介绍与使用方法
  • Python自动化部署与配置管理:Ansible与Docker
  • 《摔跤吧爸爸》19岁女星突患皮肌炎离世
  • 用结构体数组,完成宠物信息登记管理。
  • 频率主义线性回归和贝叶斯线性回归
  • 【感知算法】Dempster-Shafer理论(下)
  • 通过conda安装cudatoolikit和cudnn
  • vue中使用jsx语法
  • 我的NPI项目之Android USB 系列(一) - 遥望和USB的相识
  • K8s进阶之路-命名空间级-服务发现 :
  • 智慧公厕管理系统:让城市智慧驿站更加智慧舒适
  • 图形渲染基础学习
  • 每日学习总结20240219
  • K8s进阶之路-安装部署K8s
  • springboot集成elk实现日志采集可视化