React 项目中使用 axios 进行 HTTP 请求时,封装 get、put、post 等请求方法

news/2024/9/18 14:58:52/ 标签: react.js, http, javascript

在 React 项目中使用 axios 进行 HTTP 请求时,你可以封装 getputpost 等请求方法,使代码更简洁、复用性更高。尤其是对于 GET 请求,需要将对象参数解析并拼接到 URL 中。

以下是封装 axios 请求的一个简单示例,包括如何处理 GET 请求的 URL 参数拼接。

1. 安装 axios

javascript">npm install axios

2. 创建一个 api.js 文件来封装 axios 请求

javascript">import axios from 'axios';// 创建axios实例
const axiosInstance = axios.create({baseURL: 'https://your-api-url.com/api', // 基础URL,可以根据项目配置timeout: 5000, // 请求超时时间
});// 请求拦截器
axiosInstance.interceptors.request.use((config) => {// 在发送请求之前可以在这里添加请求头等信息// 比如 config.headers.Authorization = `Bearer ${token}`;return config;},(error) => {return Promise.reject(error);}
);// 响应拦截器
axiosInstance.interceptors.response.use((response) => {return response.data; // 直接返回数据},(error) => {return Promise.reject(error);}
);// 工具函数,用于拼接GET请求的参数到URL上
const buildUrl = (url, params) => {if (!params || Object.keys(params).length === 0) {return url;}const queryString = Object.entries(params).map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`).join('&');return `${url}?${queryString}`;
};// GET 请求封装
const get = (url, params = {}) => {const fullUrl = buildUrl(url, params);return axiosInstance.get(fullUrl);
};// POST 请求封装
const post = (url, data = {}) => {return axiosInstance.post(url, data);
};// PUT 请求封装
const put = (url, data = {}) => {return axiosInstance.put(url, data);
};// DELETE 请求封装
const del = (url, params = {}) => {const fullUrl = buildUrl(url, params);return axiosInstance.delete(fullUrl);
};// 导出封装的请求方法
export default {get,post,put,delete: del,
};

这里可以进一步封装成一个单独的函数来简化调用和传参。

javascript">export const getUserData = (params, options = {}) => {return api.get('/api/user', params, options);
};

3. 在组件中使用封装的 API

javascript">import React, { useEffect, useState } from 'react';const MyComponent = () => {const [data, setData] = useState(null);useEffect(() => {// 使用封装的GET请求,传入参数对象getUserData({ param1: 'value1', param2: 'value2' }).then((response) => {console.log('Response:', response);setData(response);}).catch((error) => {console.error('Error:', error);});}, []);return <div>{data ? JSON.stringify(data) : 'Loading...'}</div>;
};export default MyComponent;

4. 说明

  1. axiosInstance:我们创建了一个 axios 实例,设置了基础 URL 和请求超时时间。通过实例可以添加请求和响应的拦截器。
  2. buildUrl 函数:用于将 GET 请求的参数对象转换成 URL 的查询字符串格式,并拼接到 URL 上。
  3. 封装 getpostputdelete 方法:分别处理不同的请求方式,getdelete 会将参数对象拼接到 URL 上,postput 会将参数作为请求体发送。
  4. 拦截器:可以在拦截器中处理全局的请求设置,比如设置 Authorization 请求头,或者在响应拦截器中统一处理错误。

这样你在项目中就可以简单地调用封装后的 getpost 等方法,同时 get 请求也可以自动将对象参数拼接到 URL 上,提升了代码的简洁性和复用性。


http://www.ppmy.cn/news/1524583.html

相关文章

laravel 11 区分多模块的token

数据表&#xff1a;用户表&#xff08;users&#xff09;、管理员表&#xff08;admin_user&#xff09;&#xff0c; 配置bootstrap/app.php guards > [web > [driver > session,provider > admin_users,],home > [driver > sanctum,provider > users,]…

Sentence-BERT实现文本匹配【CoSENT损失】

引言 还是基于Sentence-BERT架构&#xff0c;或者说Bi-Encoder架构&#xff0c;但是本文使用的是苏神提出的CoSENT损失函数1。 点击来都是缘分&#xff0c;之前过时的方法可以不细看&#xff0c;别的文章可以不收藏&#xff0c;现在是最流行的方法&#xff0c;这篇文章建议收藏…

App推广新姿势:Xinstall带你玩转安装页面拉起功能!

在移动互联网时代&#xff0c;App已经成为我们生活中不可或缺的一部分。然而&#xff0c;随着App数量的不断增加&#xff0c;如何让自己的App在众多竞争者中脱颖而出&#xff0c;成为推广者面临的一大难题。今天&#xff0c;我们就来聊聊一个神奇的解决方案——Xinstall&#x…

项目日志——日志器模块一部缓冲区的设计、实现、测试

文章目录 异步缓冲区模块模块设计缓冲区设计单个缓冲区 实现测试 异步缓冲区模块 模块设计 异步日志器的思想是为了避免业务线程因为写日志的过程时间较长而长时间阻塞 异步日志器的工作就是把业务输出的日志内容放入内存缓冲区中&#xff0c;使用专门的线程进行日志写入 这…

C2免杀--手工shellcode编译,shellcode免杀思路

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文主要整理C2免杀中 shellcode代码免杀的相关部分 shellcode概念 我们也不啰嗦&#xff0c;我直接直观的描述一下他。 他就是一串机器能运行的代码&#xff0c;但是他不是正统的python&#xff0c;c&#xff…

vulhub spring 远程命令执行漏洞(CVE-2022-22963)

1.打开环境 进入环境所在的文件夹 docker-compose up -d 一键启动容器 2.浏览器访问环境 3.抓包 http://192.168.10.233:8080/functionRouter进行抓包 抓包修改请求方式 4.修改请求体内容 spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().e…

C++内存布局

文章目录 C内存布局1.文字介绍2.图片介绍3.代码介绍 C内存布局 1.文字介绍 1.内核态空间 2.用户态空间 (1)栈区&#xff1a;存储局部变量和函数调用的相关信息&#xff0c;栈的特点是自动分配和释放&#xff0c;由操作系统管理。栈由高地址向低地址生长&#xff0c;通常为0x…

HTTP 协议的工作过程

当我们在浏览器输入一个网址&#xff0c;此时浏览器就会给对应的服务器发送一个 HTTP 请求&#xff0c;对应的服务器收到这个请求之后&#xff0c;经过计算处理&#xff0c;就会返回一个 HTTP 响应。并且当我们访问一个网站时&#xff0c;可能涉及不止一次的 HTTP 请求和响应的…

C#索引器(Indexer)

索引器(Indexer)允许一个对象可以像数组一样使用下标的方式来访问. 当为类定义一个索引器时,该类的行为就会像一个虚拟数组(virtual array) 一样.可以使用数组访问运算符[]来访问该类的成员. 语法 一维索引器的语法如下: element-type this[int index] { // get 访问器 …

python 实现gamma 伽玛功能算法

gamma 伽玛功能算法介绍 Gamma&#xff08;伽玛&#xff09;功能算法通常与不同的领域和应用相关&#xff0c;包括但不限于图像处理、光学测试、数学计算等。以下是根据您提供的搜索结果&#xff0c;对Gamma伽玛功能算法的一些概述&#xff1a; 在图像处理中的Gamma校正 在图…

简单计算机项目2

if 条件判断 /* * if 如果 */ //条件判断是流程控制中的一部分 //条件判断是为了在指定条件下做指定的事情 int num 1 0; // if (判断条件&#xff09; //{ //满足条件做的事 …

2024.9.12 Python 累加数,子串操作,分割回文串,长度最小的子数组,整数拆分

1.分割回文串 给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是回文串返回 s 所有可能的分割方案。 示例 1&#xff1a; 输入&#xff1a;s “aab” 输出&#xff1a;[[“a”,“a”,“b”],[“aa”,“b”]] 示例 2&#xff1a; 输入&#xff…

《OpenCV计算机视觉》—— 图像形态学(腐蚀、膨胀等)

文章目录 一、图像形态学基本概念二、基本运算1.简单介绍2.代码实现 三、高级运算1.简单介绍2.代码实现 一、图像形态学基本概念 图像形态学是图像处理科学的一个独立分支&#xff0c;它基于集合论和数学形态学的理论&#xff0c;专门用于分析和处理图像中的形状和结构。图像形…

景联文科技:专业扫地机器人数据采集标注服务

景联文科技作为一家专业AI数据采集标注公司&#xff0c;提供高质量数据支持&#xff0c;致力于帮助扫地机器人制造商和研发机构提升产品的智能水平和用户体验。 扫地机器人需要通过大量的环境数据来训练其导航和清洁算法。高质量标注数据是确保机器人在各种环境下高效工作的关键…

即插即用篇 | YOLOv8 引入维度互补注意力混合Transformer模块 | 轻量级互补注意力网络:RAMiT引领图像修复新突破

本改进已同步到YOLO-Magic框架! 摘要:虽然许多近期的研究在图像修复(IR)领域取得了进展,但它们通常存在参数数量过多的问题。另一个问题是,大多数基于Transformer的图像修复方法只关注局部或全局特征,导致感受野有限或参数不足的问题。为了解决这些问题,我们提出了一种…

C++:类与对象——详解继承、多继承、虚继承

1. 继承 优点&#xff1a;减少重复的代码 语法&#xff1a;class 子类 : 继承方式 父类 子类也称为派生类&#xff0c;父类也称为基类 2. 继承方式 公共继承&#xff1a;public保护继承&#xff1a;protected私有继承&#xff1a;private 注意&#xff1a; public继承方…

C++设计模式——Memento备忘录模式

一&#xff0c;备忘录模式的定义 备忘录模式是一种行为型设计模式&#xff0c;它允许将对象的状态保存在外部&#xff0c;并在需要时恢复。 备忘录模式允许在不破坏封装性的前提下&#xff0c;捕获并存储一个对象的内部状态&#xff0c;并在需要时将其恢复到之前的状态。 在…

java设计模式day03--(结构型模式:代理模式、适配器模式、装饰者模式、桥接模式、外观模式、组合模式、享元模式)

5&#xff0c;结构型模式 结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式&#xff0c;前者采用继承机制来组织接口和类&#xff0c;后者釆用组合或聚合来组合对象。 由于组合关系或聚合关系比继承关系耦合度低&#xff0c;满足“…

maya无法导出fbx

很多小伙伴使用Maya软件导出fbx格式文件时会提示“无法识别文件类型”&#xff0c;这主要是因为没有开启fbx插件造成的&#xff0c;只要开启fbx插件就能解决这个问题。 在Maya软件的“Modeling”模式下&#xff0c;点击菜单栏的“Windows”&#xff0c;在弹出的下拉框中选择“S…

[网络原理]关于网络的基本概念 及 协议

文章目录 一. 关于网络的概念介绍1. 局域⽹LAN2. ⼴域⽹WAN3. 主机4. 路由器5. 交换机IP地址端口号 二. 协议协议分层TCP/IP五层模型(或四层)OSI七层模型封装分用 一. 关于网络的概念介绍 1. 局域⽹LAN 局域⽹&#xff0c;即 Local Area Network&#xff0c;简称LAN。 Local …