路径传参和查询传参和请求体传参区以及Vue和React的用法区分

这三者分别对应着不同的数据传递场景。简单来说:

  • 路径传参 和查询传参 主要用于前端路由跳转时,在页面间传递数据。
  • 请求体传参 则是在前后端通信(如 POST/PUT 请求)时,向服务器发送数据。

Vue 和 React 在这方面的核心思想是相通的,但具体写法(API)有所不同。


📖 概念解析与对比

我们可以用一个"寄快递"的比喻来理解:

  1. 路径传参 (Path Parameters)

    • 比喻 :写在快递单上的收货地址 。比如"XX小区 5号楼 301室",5号楼就是路径参数,用来精确定位到唯一的资源。
    • 作用 :用于标识一个特定的、唯一的资源 。例如,访问某个用户的个人主页 (/user/123) 或某篇文章的详情页 (/article/abc)。
    • URL形态 :参数直接嵌入在路径中,如 /users/:id。
  2. 查询传参 (Query Parameters)

    • 比喻 :给快递员的附加指示。比如"如果没人就放快递柜"、"按重量排序再派送"。这些不改变收货地址,只是修饰了派送过程。
    • 作用 :用于筛选、排序、分页 等,通常不是必需的。例如,搜索商品列表 (/products?keyword=phone&page=2)。
    • URL形态 :参数跟在 ? 后面,用 & 连接,如 ?page=2&sort=name。
  3. 请求体传参 (Request Body)

    • 比喻 :包裹里的具体内容物。比如你要退货,包裹里装着你退的商品,而不是把商品信息写在快递单上。
    • 作用 :在 POST、PUT 等请求中,向服务器提交大量或敏感的数据,如创建新用户、更新文章、登录时的密码等。这些数据不会暴露在 URL 中。
    • URL形态:URL 本身不包含这部分数据,数据隐藏在 HTTP 请求的内部。

🆚 三者的核心区别

特性 路径传参 (Path Params) 查询传参 (Query Params) 请求体传参 (Request Body)
主要用途 前端路由跳转 前端路由跳转 前后端数据通信
语义 标识资源 (是什么) 修饰资源 (怎么查) 提交数据 (增/改内容)
安全性 较低 (暴露在URL中) 较低 (暴露在URL中) 较高 (不暴露在URL中)
数据量 较小 (通常是ID) 较小 (受URL长度限制) 较大 (可传JSON、文件等)
典型请求 GET (获取单个资源) GET (获取资源列表) POST / PUT / PATCH

⚛️ Vue 与 React 的用法异同

虽然思想一致,但 Vue Router 和 React Router 的 API 设计不同,导致写法有差异。

路径传参 (Path Params)

  • Vue Router

    • 定义路由 : 使用冒号声明占位符,如 path: '/user/:id'。

    • 跳转传参 : 必须使用 name 属性配合 params。

      php 复制代码
      router.push({ name: 'User', params: { id: 123 } })
    • 接收参数 : 通过 route.params.id 获取。

      scss 复制代码
      const route = useRoute()
      console.log(route.params.id) // 输出: 123
  • React Router

    • 定义路由 : 同样使用冒号声明占位符,如 <Route path="/user/:id" ... />。

    • 跳转传参: 直接将参数拼接到路径字符串中。

      ini 复制代码
      const navigate = useNavigate();
      navigate(`/user/${id}`);
    • 接收参数 : 使用 useParams 钩子。

      javascript 复制代码
      import { useParams } from 'react-router-dom';
      const { id } = useParams();
      console.log(id); // 输出: 123

查询传参 (Query Params)

  • Vue Router

    • 跳转传参 : 使用 query 对象,可以配合 path 或 name。

      php 复制代码
      router.push({ path: '/search', query: { keyword: 'vue' } })
    • 接收参数 : 通过 route.query.keyword 获取。

      scss 复制代码
      const route = useRoute()
      console.log(route.query.keyword) // 输出: 'vue'
  • React Router

    • 跳转传参: 手动将参数拼接成查询字符串。

      ini 复制代码
      const navigate = useNavigate();
      navigate(`/search?keyword=react`);
    • 接收参数 : 使用 useSearchParams 钩子。

      javascript 复制代码
      import { useSearchParams } from 'react-router-dom';
      const [searchParams] = useSearchParams();
      console.log(searchParams.get('keyword')); // 输出: 'react'

请求体传参 (Request Body)

这个部分与路由库无关 ,Vue 和 React 项目中的做法是完全一样的。通常都使用 axios、fetch 等 HTTP 客户端库来完成。

  • 通用实现方式 (以 axios 为例)

    • 发送数据: 将数据作为第二个参数传递给 POST/PUT 方法。

      javascript 复制代码
      // 在 Vue 或 React 组件中都一样
      async function saveUser() {
        const newUser = { username: 'Alice', password: '123456' };
        const response = await axios.post('/api/users', newUser);
        console.log(response.data);
      }
    • 后端接收: 后端框架(如 Express, SpringBoot)会从请求体中解析出 JSON 数据。

总结

  1. 路径和查询传参 是前端路由的概念,用于页面间导航和数据传递。请求体传参是网络请求的概念,用于和服务器交互。
  2. Vue 和 React 在处理路由传参时,API 不同,需要分别记忆。
  3. 在进行请求体传参时,两者没有区别,都是使用相同的 HTTP 库。
相关推荐
FRing031 小时前
JavaScript入门到精通三十二(深拷贝、浅拷贝、递归函数)
开发语言·前端·javascript
excel1 小时前
双 Token 与前端使用 Crypto 公私钥鉴权换 Token,哪种方案更好?
前端·后端
外收内放1 小时前
Python基础语法练习题(73)
java·前端·python
风骏时光牛马2 小时前
面向复杂场景的大模型应用落地与能力优化实践
前端
考研保研资料分享2 小时前
2025公卫保研清华专硕:三校考核、英文读译与择校复盘
面试
小小善后师2 小时前
我做了个病历归档小程序,被 AI 识别的"最后一公里"狠狠上了一课
前端
H_Lisa2 小时前
我用 Express 写了个 MCP,Claude 直接调用我的 API 了
前端
IT_陈寒2 小时前
React的useEffect依赖数组把我坑惨了
前端·人工智能·后端
兰亭妙微UI设计公司3 小时前
兰亭妙微ui设计公司分享:B端组件命名如何支持团队协作
前端·javascript·vue.js
云和数据.ChenGuang4 小时前
光哥说Python 异常深度解析:从异常模型到工程化实践
java·前端·人工智能·python·langchain