React 中使用 Axios 进行 HTTP 请求

下面是一个案例,展示如何在 React 中使用 Axios 进行 HTTP 请求,包括 GET 和 POST 请求的使用。

1. 安装 Axios

确保项目中已安装 Axios,可以通过以下命令安装:

npm install axios

2. 创建一个简单的 React 应用

项目结构:

src/
├── App.js
├── services/
│   └── api.js

在这里插入图片描述

(1) 在 services/api.js 中封装 Axios 实例:

封装 Axios 实例可以统一管理请求,比如添加 Base URL 和请求拦截器。

// src/services/api.js
import axios from 'axios';// 创建 Axios 实例
const api = axios.create({baseURL: 'https://jsonplaceholder.typicode.com', // API 基础地址timeout: 10000, // 超时时间
});// 添加请求拦截器
api.interceptors.request.use((config) => {// 在请求发送之前做一些处理,比如添加 tokenconsole.log('请求拦截器:', config);return config;},(error) => {return Promise.reject(error);}
);// 添加响应拦截器
api.interceptors.response.use((response) => {console.log('响应拦截器:', response);return response.data; // 直接返回数据},(error) => {console.error('响应错误:', error);return Promise.reject(error);}
);export default api;

(2) 在 App.js 中使用 Axios 发起请求:

// src/App.js
import React, { useEffect, useState } from 'react';
import api from './services/api';function App() {const [posts, setPosts] = useState([]);const [newPost, setNewPost] = useState({ title: '', body: '' });const [loading, setLoading] = useState(false);// GET 请求:获取数据useEffect(() => {const fetchPosts = async () => {setLoading(true);try {const data = await api.get('/posts');setPosts(data.slice(0, 5)); // 仅展示前 5 条} catch (error) {console.error('获取帖子失败:', error);} finally {setLoading(false);}};fetchPosts();}, []);// POST 请求:提交数据const handleSubmit = async (e) => {e.preventDefault();try {const data = await api.post('/posts', newPost);setPosts([data, ...posts]); // 添加新帖子到列表setNewPost({ title: '', body: '' }); // 清空表单} catch (error) {console.error('提交帖子失败:', error);}};return (<div style={{ padding: '20px' }}><h1>Axios 示例</h1>{/* 加载状态 */}{loading && <p>加载中...</p>}{/* 显示帖子列表 */}<ul>{posts.map((post) => (<li key={post.id}><h3>{post.title}</h3><p>{post.body}</p></li>))}</ul>{/* 添加新帖子 */}<form onSubmit={handleSubmit} style={{ marginTop: '20px' }}><inputtype="text"placeholder="标题"value={newPost.title}onChange={(e) => setNewPost({ ...newPost, title: e.target.value })}requiredstyle={{ marginRight: '10px' }}/><textareaplaceholder="内容"value={newPost.body}onChange={(e) => setNewPost({ ...newPost, body: e.target.value })}requiredstyle={{ marginRight: '10px' }}/><button type="submit">提交</button></form></div>);
}export default App;

3. 功能说明:

页面加载时,通过 useEffect 调用 api.get 获取帖子数据。
用户可以通过表单提交新的帖子,调用 api.post 将数据发送到服务器。
请求和响应都通过封装好的 Axios 实例处理,支持拦截器统一管理。

4. 效果截图

初始状态:显示已有帖子。如图:
在这里插入图片描述
提交后:新帖子会添加到列表顶部。如图:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/475150.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【GoogleChrome】在开发者工具中修改js、css并生效

以下网站有个登录验证cookie的js 按f12打开开发者工具&#xff0c;看到验证规则很简单 添加替换js的本地文件夹 允许权限 删除js并按ctrls保存&#xff0c;然后刷新页面&#xff0c;新js生效

CentOS操作系统下安装Nacos

CentOS下安装Nacos 前言 这在Centos下安装配置Nacos 下载Linux版Nacos 首先到Nacos的 Github页面&#xff0c;找到所需要安装的版本 也可以右键复制到链接&#xff0c;然后通过wget命令进行下载 wget https://github.com/alibaba/nacos/releases/download/1.3.2/nacos-ser…

数据结构--跳表

跳表 原理实现 原理 跳表&#xff08;skiplist&#xff09;是一种链表&#xff0c;而链表查询的时间复杂度为O(n)&#xff0c;为了优化查询效率&#xff0c;我们可以让每相邻两个节点升高一层&#xff0c;增加一个指针&#xff0c;让指针指向下下个节点&#xff1a; 这样所有…

【学术论文投稿】JavaScript 前端开发:从入门到精通的奇幻之旅

【中文核刊&普刊投稿通道】2024年体育科技与运动表现分析国际学术会议(ICSTPA 2024)_艾思科蓝_学术一站式服务平台 更多学术会议论文投稿请看&#xff1a;https://ais.cn/u/nuyAF3 目录 一、引言 二、JavaScript 基础 &#xff08;一&#xff09;变量与数据类型 &am…

云计算实训室建设的必要性

一、云计算发展的背景 云计算作为一种新型的信息技术服务模式&#xff0c;通过互联网提供动态易扩展且通常是虚拟化的资源&#xff0c;涵盖了从基础设施服务&#xff08;IaaS&#xff09;、平台服务&#xff08;PaaS&#xff09;到软件服务&#xff08;SaaS&#xff09;等多个…

鼠标绘制轮廓

需要对label进行提升&#xff0c;新建MyLabel类&#xff0c;并将其提升到label控件上&#xff0c;详见上篇控件提升 mylabelmouse.h #pragma once #include <QtWidgets/QMainWindow> #include "ui_mylabelmouse.h" #include <QMenu> #include "My…

LLM( Large Language Models)典型应用介绍 1 -ChatGPT Large language models

ChatGPT 是基于大型语言模型&#xff08;LLM&#xff09;的人工智能应用。 GPT 全称是Generative Pre-trained Transformer。-- 生成式预训练变换模型&#xff1a; Generative&#xff08;生成式&#xff09;&#xff1a;可以根据输入生成新的文本内容&#xff0c;例如回答问题…

STM322完全学习——FSMC控制LCD显示屏

一、GPIO初始化 首先这个功能只有大容量的STM32系列有&#xff0c;C8T6是没有的。再就是FSMC这个使用的是GPIO的复用功能&#xff0c;下面先完成我们需要使用的GPIO的初始化 void TFTLCD_GPIO_Init(void) {GPIO_InitTypeDef GPIO_InitStructure;RCC_AHB1PeriphClockCmd(RCC_…

MongoDB数据备份与恢复(内含工具下载、数据处理以及常见问题解决方法)

一、工具准备 对MongoDB进行导入导出、备份恢复等操作时需要用到命令工具&#xff0c;我们要先检查一下MongoDB安装目录下是否有这些工具&#xff0c;正常情况下是没有的:)&#xff0c;因为新版本的MongoDB安装时不包含这些工具&#xff0c;需要我们手动下载安装。下载成功之后…

【C语言】volatile 防止编译的时候被优化

volatile 易变的 volatile是 C 和 C 中的一个类型修饰符&#xff0c;用于指示编译器该变量可能在程序之外被更改&#xff0c;因此不应对其进行优化。这在涉及硬件寄存器、信号处理或多线程编程时非常有用。 如果你做过单片机开发&#xff0c;你肯定写过这样的代码&#xff1a;…

el-table实现最后一行合计功能并合并指定单元格

效果图如下&#xff1a; 表格代码如下&#xff1a; <el-table width"100%"ref"tableRef" style"margin-bottom: 15px;":data"jlData"class"tableHeader6"header-row-class-name"headerStyleTr6":row-class-n…

【JavaSE】【网络编程】UDP数据报套接字编程

目录 一、网络编程简介二、Socket套接字三、TCP/UDP简介3.1 有连接 vs 无连接3.2 可靠传输 vs 不可靠传输3.3 面向字节流 vs 面向数据报3.4 双向工 vs 单行工 四、UDP数据报套接字编程4.1 API介绍4.1.1 DatagramSocket类4.1.1.1 构造方法4.1.1.2 主要方法 4.1.2 DatagramPocket…

web——sqliabs靶场——第十二关——(基于错误的双引号 POST 型字符型变形的注入)

判断注入类型 a OR 1 1# 发现没有报错 &#xff0c;说明单引号不是闭合类型 测试别的注入条件 a) OR 1 1# a)) OR 1 1# a" OR 11 发现可以用双引号闭合 发现是")闭合 之后的流程还是与11关一样 爆破显示位 先抓包 是post传参&#xff0c;用hackbar来传参 unam…

【Linux】开发工具make/Makefile、进度条小程序

Linux 1.make/Makefile1.什么是make和Makefile&#xff1f;2.stat命令3.Makefile单个文件的写法4.Makefile多个文件的写法 2.进度条1.回车\r、换行\n2.缓冲区3.进度条1.倒计时程序2.进度条程序 1.make/Makefile 1.什么是make和Makefile&#xff1f; 一个工程中的源文件不计其…

Ubuntu22.04配置强化学习环境及运行相关Demo

什么是强化学习 强化学习&#xff08;Reinforcement Learning&#xff0c;简称 RL&#xff09;是机器学习中的一个重要分支&#xff0c;属于一种基于试错机制的学习方法。它通过让智能体&#xff08;Agent&#xff09;与环境&#xff08;Environment&#xff09;进行交互&…

GitHub 开源项目 Puter :云端互联操作系统

每天面对着各种云盘和在线应用&#xff0c;我们常常会遇到这样的困扰。 文件分散在不同平台很难统一管理&#xff0c;付费订阅的软件越来越多&#xff0c;更不用说那些烦人的存储空间限制了。 最近在 GitHub 上发现的一个开源项目 Puter 彻底改变了我的在线办公方式。 让人惊…

深入解析小程序组件:view 和 scroll-view 的基本用法

深入解析小程序组件:view 和 scroll-view 的基本用法 引言 在微信小程序的开发中,组件是构建用户界面的基本单元。两个常用的组件是 view 和 scroll-view。这两个组件不仅功能强大,而且使用灵活,是开发者实现复杂布局和交互的基础。本文将深入探讨这两个组件的基本用法,…

河道水位流量一体化自动监测系统:航运安全的护航使者

在广袤的水域世界中&#xff0c;航运安全始终是至关重要的课题。而河道水位流量一体化自动监测系统的出现&#xff0c;如同一位强大的护航使者&#xff0c;为航运事业的稳定发展提供了坚实的保障。 水位传感器&#xff1a;负责实时监测河道的水位变化。这些传感器通常采用先进的…

开源可视化工具对比:JimuReport VS DataEase

在当今数据驱动的时代&#xff0c;高效的数据可视化工具成为企业洞察业务、做出决策的关键利器。那对于企业来讲如何选择BI产品呢&#xff1f; 在开源可视化工具的领域中&#xff0c;JimuReport和DataEase 以其独特的优势脱颖而出&#xff0c;究竟谁更胜一筹呢&#xff1f;让我…

jquery还有其应用场景,智慧慢慢地被边缘化,但不会消亡

一、jQuery 的辉煌过往 jQuery 的诞生与崛起 在前端开发的漫长历史中&#xff0c;2006 年诞生的 jQuery 犹如一颗耀眼的新星划破天际。它由 John Resig 创造&#xff0c;一出现便以其独特的魅力迅速吸引了广大开发者的目光。在那个前端技术发展相对缓慢的时期&#xff0c;jQue…