• Day09 React———— 第九天


    ReactRoter

    一个路径 path 对应一个组件 component 当我们在浏览器中访问一个 path 的时候,path 对应的组件会在页面中进行渲染

    基础用法

    1. import { createBrowserRouter, RouterProvider } from "react-router-dom";
    2. const router = createBrowserRouter([
    3. { path: "/login", element: <div>我是login组件div> },
    4. { path: "/active", element: <div>我是active组件div> },
    5. {path:"/",element:<App/>}
    6. ]);
    7. const root = ReactDOM.createRoot(document.getElementById("root"));
    8. root.render(
    9. // 使用中间件链接 将store注入 react中
    10. <RouterProvider router={router}>
    11. <App />
    12. RouterProvider>
    13. );

    把router单独封装成一个文件

    1. import { createBrowserRouter } from "react-router-dom";
    2. import Login from "../page/Login";
    3. import Active from "../page/Active";
    4. const router = createBrowserRouter([
    5. {
    6. path: "/login",
    7. element: (
    8. <div>
    9. <Login />
    10. div>
    11. ),
    12. },
    13. { path: "/active", element: <div>
    14. <Active />
    15. div> },
    16. ]);
    17. export default router;

    路由导航跳转

    声明式导航

    声明式导航是指通过在模版中通过 组件描述出要跳转到哪里去,比如后台管理系统的左侧菜单通常使用这种方式进行

    1. {/* 声明式导航 */}
    2. <Link to="/login">去login页Link>

    路由式导航

    编程式导航是指通过 useNavigate 钩子得到导航方法,然后通过调用方法以命令式的形式进行路由跳转,比如想在登录请求完毕之后跳转就可以选择这种方式,更加灵活

    1. {/* 编程式导航 */}
    2. onClick={() => {
    3. navigation("/active");
    4. }}
    5. >
    6. 去active

    获取参数

    serchParams 传参

    1. // app.js
    2. onClick={() => {
    3. navigation("/active?id=88&name=liis");
    4. }}
    5. >
    6. serchParams 传参
    7. // 目标组件
    8. const [parms] = useSearchParams();
    9. console.log(parms.get('id')); // 888

     params 传参

    1. app.js
    2. onClick={() => {
    3. navigation("/active/8889/lool");
    4. }}
    5. >
    6. params 传参
    7. //目标组件
    8. const parms = useParams();
    9. console.log(parms); // {id: '8889', name: 'lool'}

    注意使用params传参时需要修改router路径

    1. {
    2. path: "/active/:id/:name",
    3. element: (
    4. <div>
    5. <Active />
    6. div>
    7. ),
    8. }

    嵌套路由配置

    在一级路由中又内嵌了其他路由,这种关系就叫做嵌套路由,嵌套至一级路由内的路由又称作二级路由

    1. // 路由配置
    2. {
    3. path: "/login",
    4. element: <Login />,
    5. children: [
    6. {
    7. index:true ,// 配置默认二级路由
    8. element: <LoginA />,
    9. },
    10. {
    11. path: "b",
    12. element: <LoginB />,
    13. },
    14. ],
    15. },
    16. //页面通过固定组件Outlet接收
    17. <div>
    18. my name is login
    19. <div>
    20. <Link to="a">go ALink>
    21. <Link to="b">go BLink>
    22. <Outlet/>
    23. div>
    24. div>

    两种路由模式 

    各个主流框架的路由常用的路由模式有俩种,history模式和hash模式, ReactRouter分别由 createBrowerRouter 和 createHashRouter 函数负责创建

    路由模式url表现底层原理是否需要后端支持
    historyurl/loginhistory对象 + pushState事件需要
    hashurl/#/login监听hashChange事件不需要

    useMemo

    useMemo 是一个 React Hook,它在每次重新渲染的时候能够缓存计算的结果。

    const cachedValue = useMemo(calculateValue, dependencies)
  • 相关阅读:
    Kotlin和Java互调空指针相关的问题(两种可能NullPointerException的情况)
    操作系统题目收录(一)
    网络安全自学手册
    线程池与CompletableFuture
    数据结构试题(一)
    Nginx配置动态反向代理
    Netty的零拷贝(Zero-Copy)
    【大模型应用开发教程】动手学大模型应用开发,一起探索LLM Universe
    生于云、长于云,RocketMQ 5.0 再出发
    Photographic Tone Reproduction for Digital Images
  • 原文地址:https://blog.csdn.net/gu644335363/article/details/137902731