前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >React-Router 基础学习

React-Router 基础学习

作者头像
心安事随
发布2024-07-29 17:12:19
770
发布2024-07-29 17:12:19
举报
文章被收录于专栏:前端大合集

React-Router学习

声明式导航:

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

代码语言:javascript
复制
 <Link to="/home"></Link>

语法说明:

通过给组件的to属性指定要跳转到路由path, 组件会被渲染位浏览器支持的a链接,如果需要传参直接 通过字符串拼接的方式拼接参数即可

编程式导航

编程式导航是通过useNavigate 钩子得到导航方法, 然后通过调用方法以命令式的形式进行路由跳转

比如:

  • 想在登录请求完毕之后,跳转到首页面,就可以选择这种方式,更加灵活
代码语言:javascript
复制
 import { useNavigate } from "react-router-dom";
 const navigate = useNavigate();   
 {/* 命令式导航路由 */}
 <button onClick={()=>{navigate('/article')}}>跳转到文章页面</button>

导航传参

1. useSearchParams 传参

传递参数 以及目标路由接收参数的方式

传递参数

代码语言:javascript
复制
 {/* 带参导航路由 */}
 <button onClick={()=>{navigate('/article?id=1002&name=jack')}}>带参导航路由</button>

目标路由接收参数的方式

代码语言:javascript
复制
 import { useSearchParams } from "react-router-dom";
 
 // 该方法会返回一个数组 数组里面有一个固定的对象 params
 const [params] = useSearchParams();
 const id = params.get("id"); // 1002

2. params 传参

1. 传递参数的方式

pages / login / index.jsx

代码语言:javascript
复制
 {/* {parmas 带参导航路由} */}
 {/* {这里/1002/jack} 注意需要在路由那边正确配置一下, 和这个传递的参数达到一致才能正确匹配到路由 */}
 <button onClick={()=>{navigate('/article/1002/张三')}}>parmas</button>

2. 先去router里面进行占位符的配置

router/index.jsx

代码语言:javascript
复制
 const router = createBrowserRouter([
   {
     path: "/article/:id/:name",
     Component: Article,
   },
   {
     path: "/login",
     Component: Login,
   },
 ]);

3. 目标路由接收参数的方式

pages / article / index.jsx

代码语言:javascript
复制
 // 导入useParams
 import { useSearchParams, useParams } from "react-router-dom";
 // 创建实例
 const params1 = useParams();
 // 从实例身上 拿到id字段
  const id1 = params1.id;
 // 从实例身上 拿到name字段
  const name1 = params1.name;

嵌套路由配置

在一级路由里面又内嵌入其他路由,这种关系就叫做嵌套路由,嵌套指一级路由内又称作二级路由,例如:

嵌套路由

代码语言:javascript
复制
const router = createBrowserRouter([
  {
    path: "/",
    /* AuthRoute({children}) */
    /* <AuthRoute>{children}</AuthRoute> */
    element: <AuthRoute> {<Layout />}</AuthRoute>,
    children: [
      {
        index: true,
        element: <Suspense fallback={'加载中'}><Home /></Suspense>
      },
      {
        path: 'article',
        element: <Suspense fallback={'加载中'}><Article /></Suspense>
      },
      {
        path: 'publish',
        element: <Suspense fallback={'加载中'}><Publish /></Suspense>
      },    
      {
        path: 'zustand',
        element: <Suspense fallback={'加载中'}><Zustand /></Suspense>
      }
    ]
  },
  {
    path: "/login",
    element: <Login />
  }
])

默认二级路由

当访问的是一级路由时候,默认的二级路由组件可以得到渲染, 只需要在二级路由的位置去掉Path,设置index属性为true

代码语言:javascript
复制
 const router = createBrowserRouter([
   {
     path: "/",
     Component: layout,
     children: [
       // 设置为二级路由,一级路由访问的时候,二级路由也可以得到渲染
       {
         // 去掉path  添加index:true
         // path: "/about",
         index:true,
         Component: about,
       },
       {
         path: "/board",
         Component: board,
       },
     ],
   },
 ]);

404路由配置

场景:

  • 当浏览器输入的url路径在整个路由表里面找不到对应的path的下
  • 为了优化用户体验,可以使用404兜底组件进行渲染

实现步骤:

  1. 准备一个NotFound组件
  2. 在路由表数组的末尾,以* 号作为路由的path 配置路由

代码:

代码语言:javascript
复制
import {NotFound} from '@/views/NotFound.jsx'
......
 const router = createBrowserRouter([
   .......
   // 数组的末尾处 进行配置
   {
     path: "*",
     Component: NotFound,
   },
 ]);

两种路由的方式

模式

说明

BrowserRouter

使用HTML5的history API来管理浏览器历史记录。这种方式在URL中不包含“#”,并且可以在浏览器的前进和后退按钮之间导航。

HashRouter

使用URL的hash部分(即URL后面的部分)来模拟一个完整的URL路径。这种方式会创建一个URL,其中包含了"#", 并且这种方式并不涉及到浏览器的历史记录,所以不能使用浏览器的前进、后退按钮来实现页面之间的跳转。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-07-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • React-Router学习
    • 声明式导航:
      • 编程式导航
        • 导航传参
          • 1. useSearchParams 传参
          • 2. params 传参
        • 嵌套路由配置
          • 默认二级路由
            • 404路由配置
              • 两种路由的方式
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档