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

react_13

React Router

//-dom代表给浏览器应用使用的

npm install react-router-dom

  • 目前版本是 "react-router-dom": "^6.18.0"

  • 使用

    新建文件 src/router/MyRouter.tsx

  • import { Navigate, RouteObject, useRoutes } from "react-router-dom";
    import { Route } from "../model/Student";
    import A8Login from "../pages/A8Login";
    import A8Main from "../pages/A8Main";
    import A8NotFound from "../pages/A8NotFound";
    import { lazy } from "react";
    import RoutesStore from "../store/RoutesStore";
    import { observer } from "mobx-react-lite";
    export function load(name: string) {//lazy方法可以根据字符串获得字符串组件对应着的组件标签const Page = lazy(() => import(`../pages/${name}`));console.log(Page);return <Page></Page>;
    }function MyRouter() {console.log(RoutesStore.routes)const router = useRoutes(RoutesStore.routes);return router;
    }
    //注意导入 router 对象时,用 observer 做了包装,这样能够在 store 发生变化时重建 router 对象
    export default observer(MyRouter)

    index.tsx 修改为

  • import ReactDOM from "react-dom/client";
    import "./index.css";import reportWebVitals from "./reportWebVitals";import { ConfigProvider } from "antd";
    import zhCN from "antd/es/locale/zh_CN";import MyRouter from "./router/MyRouter";
    import { BrowserRouter } from "react-router-dom";
    const root = ReactDOM.createRoot(document.getElementById("root") as HTMLElement
    );root.render(<ConfigProvider locale={zhCN}><BrowserRouter><MyRouter></MyRouter></BrowserRouter></ConfigProvider>
    );// If you want to start measuring performance in your app, pass a function
    // to log results (for example: reportWebVitals(console.log))
    // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
    reportWebVitals();
    

    A8Main 的代码

  • import {DownCircleOutlined,MenuFoldOutlined,VerticalAlignTopOutlined,
    } from "@ant-design/icons";
    import { Button, Layout, Menu } from "antd";
    import { ItemType } from "antd/es/menu/hooks/useItems";
    import { Link, Navigate, Outlet, useNavigate } from "react-router-dom";
    import Icon from "../store/Icon";
    import StudentStore from "../store/StudentStore";
    import RoutesStore from "../store/RoutesStore";
    import { observer } from "mobx-react-lite";
    import { useEffect } from "react";function A8Main() {const items: ItemType[] = [{label: <Link to="/student">学生管理</Link>,key: 1,icon: <DownCircleOutlined />,},{label: <Link to="/teacher">教师管理</Link>,key: 2,icon: <VerticalAlignTopOutlined />,},{label: "用户管理",key: 3,icon: <MenuFoldOutlined />,children: [{label: "功能一",key: 31,icon: <Icon name="PicLeftOutlined"></Icon>,},{label: "功能二",key: 32,icon: <Icon name="BorderHorizontalOutlined"></Icon>,},],},];const nav = useNavigate();//点击注销按钮,清空localStorage里面和state数据,跳转到登录页面function onClick() {RoutesStore.reset();nav("/login");}//useEffect()的执行时机是先生成了jsx代表,然后执行了副作用,然后再渲染,正在渲染的时候执行了跳转,所以看到//主页一闪而过,/* useEffect(() => {if (RoutesStore.username === "") {nav("/login");}}, []); */if (RoutesStore.username === "") {return <Navigate to={"/login"}></Navigate>;}return (<Layout><Layout.Header><span>欢迎您【{RoutesStore.username}】</span><Button onClick={onClick}>注销</Button></Layout.Header><Layout><Layout.Sider><Menu items={RoutesStore.menus} theme="dark" mode="inline"></Menu></Layout.Sider><Layout.Content><Outlet></Outlet></Layout.Content></Layout></Layout>);
    }
    export default observer(A8Main);
    

  • Navigate 的作用是重定向

  • load 方法的作用是懒加载组件,更重要的是根据字符串找到真正的组件,这是动态路由所需要的

  • children 来进行嵌套路由映射,嵌套路由在跳转后,并不是替换整个页面,而是用新页面替换父页面的 Outlet 部分

http://www.lryc.cn/news/219980.html

相关文章:

  • vscode git提交
  • LangChain+LLM实战---实用Prompt工程讲解
  • 虚拟机备份中的CBT技术
  • 云服务器哪家便宜靠谱 | 简单了解亚马逊云科技发展史
  • 【LeetCode】每日一题 2023_11_6 最大单词长度乘积
  • 【小白专用】PHP中的JSON转换操作指南 23.11.06
  • Web3游戏的十字路口:沿用传统IP还是另起炉灶?
  • 【系统架构设计】架构核心知识:4 系统可靠性分析与设计
  • 什么是站群服务器的优点?
  • 图数据库Neo4j——SpringBoot使用Neo4j 简单增删改查 复杂查询初步
  • -- Could NOT find livox_ros_driver (missing: livox_ros_driver_DIR)
  • 山东餐饮类行业可以办理那些认证?
  • 【抖音自动评论的软件】评论888无偿分享,和其开发技术与开发流程的分享
  • 挑战100天 AI In LeetCode Day02(2)
  • 《尚医通》Vue3 项目+TypeScript 前端项目(持续更新,附带源码)
  • 仪表盘 gauge
  • 常见面试题-MySQL专栏(三)MVCC、BufferPool
  • CDN加速:国内外价格与企业云服务最佳搭配方案
  • uni-app小程序使用vant
  • C-DS二叉树_另一棵树的子树
  • 祝贺璞华大数据产品入选中国信通院“铸基计划”
  • WebDAV之π-Disk派盘 + MiXplorer
  • java依赖的jar包下载
  • 苹果加大对印度的扶持,提高在其生产iphone的比重
  • 【漏洞复现】typecho_v1.0-14.10.10_unserialize
  • Linux常见面试题
  • HarmonyOS ArkTS基础知识
  • 嵌入式课后习题第一章解答
  • postMessage
  • 挑战100天 AI In LeetCode Day01(1)