React中使用Axios進(jìn)行HTTP請(qǐng)求
下面是一個(gè)案例,展示如何在 React 中使用 Axios 進(jìn)行 HTTP 請(qǐng)求,包括 GET 和 POST 請(qǐng)求的使用。
1. 安裝 Axios
確保項(xiàng)目中已安裝 Axios,可以通過(guò)以下命令安裝:
npm install axios
2. 創(chuàng)建一個(gè)簡(jiǎn)單的 React 應(yīng)用
項(xiàng)目結(jié)構(gòu):
src/
├── App.js
├── services/
│ └── api.js
(1) 在 services/api.js 中封裝 Axios 實(shí)例:
封裝 Axios 實(shí)例可以統(tǒng)一管理請(qǐng)求,比如添加 Base URL 和請(qǐng)求攔截器。
// src/services/api.js import axios from 'axios'; // 創(chuàng)建 Axios 實(shí)例 const api = axios.create({ baseURL: 'https://jsonplaceholder.typicode.com', // API 基礎(chǔ)地址 timeout: 10000, // 超時(shí)時(shí)間 }); // 添加請(qǐng)求攔截器 api.interceptors.request.use( (config) => { // 在請(qǐng)求發(fā)送之前做一些處理,比如添加 token console.log('請(qǐng)求攔截器:', config); return config; }, (error) => { return Promise.reject(error); } ); // 添加響應(yīng)攔截器 api.interceptors.response.use( (response) => { console.log('響應(yīng)攔截器:', response); return response.data; // 直接返回?cái)?shù)據(jù) }, (error) => { console.error('響應(yīng)錯(cuò)誤:', error); return Promise.reject(error); } ); export default api;
(2) 在 App.js 中使用 Axios 發(fā)起請(qǐng)求:
// 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 請(qǐng)求:獲取數(shù)據(jù) 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 請(qǐng)求:提交數(shù)據(jù) 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> {/* 加載狀態(tài) */} {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' }}> <input type="text" placeholder="標(biāo)題" value={newPost.title} onChange={(e) => setNewPost({ ...newPost, title: e.target.value })} required style={{ marginRight: '10px' }} /> <textarea placeholder="內(nèi)容" value={newPost.body} onChange={(e) => setNewPost({ ...newPost, body: e.target.value })} required style={{ marginRight: '10px' }} /> <button type="submit">提交</button> </form> </div> ); } export default App;
3. 功能說(shuō)明
頁(yè)面加載時(shí),通過(guò) useEffect 調(diào)用 api.get 獲取帖子數(shù)據(jù)。
用戶可以通過(guò)表單提交新的帖子,調(diào)用 api.post 將數(shù)據(jù)發(fā)送到服務(wù)器。
請(qǐng)求和響應(yīng)都通過(guò)封裝好的 Axios 實(shí)例處理,支持?jǐn)r截器統(tǒng)一管理。
4. 效果截圖
初始狀態(tài):顯示已有帖子。如圖:
提交后:新帖子會(huì)添加到列表頂部。如圖:
到此這篇關(guān)于React中使用Axios進(jìn)行HTTP請(qǐng)求的文章就介紹到這了,更多相關(guān)React Axios進(jìn)行HTTP請(qǐng)求內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ReactNative實(shí)現(xiàn)的橫向滑動(dòng)條效果
本文介紹了ReactNative實(shí)現(xiàn)的橫向滑動(dòng)條效果,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),補(bǔ)充介紹了ReactNative基于寬度變化實(shí)現(xiàn)的動(dòng)畫(huà)效果,感興趣的朋友跟隨小編一起看看吧2024-02-02淺談React Native Flexbox布局(小結(jié))
這篇文章主要介紹了淺談React Native Flexbox布局(小結(jié)),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01關(guān)于react-router/react-router-dom v4 history不能訪問(wèn)問(wèn)題的解決
這篇文章主要給大家介紹了關(guān)于react-router/react-router-dom v4 history不能訪問(wèn)問(wèn)題的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01ForwardRef?useImperativeHandle方法demo
這篇文章主要為大家介紹了ForwardRef?useImperativeHandle方法demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03react-native使用react-navigation進(jìn)行頁(yè)面跳轉(zhuǎn)導(dǎo)航的示例
本篇文章主要介紹了react-native使用react-navigation進(jìn)行頁(yè)面跳轉(zhuǎn)導(dǎo)航的示例,具有一定的參考價(jià)值,有興趣的可以了解一下2017-09-09React項(xiàng)目中fetch實(shí)現(xiàn)跨域接收傳遞session的解決方案
這篇文章主要介紹了React項(xiàng)目中fetch實(shí)現(xiàn)跨域接收傳遞session的解決方案,本次項(xiàng)目使用了react框架,同時(shí)使用fetch取代ajax作為獲取接口數(shù)據(jù)的交互方法,下面就對(duì)這次問(wèn)題的解決做個(gè)總結(jié),需要的朋友可以參考下2022-04-04使用React hook實(shí)現(xiàn)remember me功能
相信大家在使用 React 寫(xiě)頁(yè)面的時(shí)候都遇到過(guò)完成 Remember me 的需求吧!本文就將這個(gè)需求封裝在一個(gè) React hook 中以供后續(xù)的使用,覺(jué)得有用的同學(xué)可以收藏起來(lái)以備不時(shí)之需,感興趣的小伙伴跟著小編一起來(lái)看看吧2024-04-04vite+react+tailwindcss的簡(jiǎn)單使用方式
這篇文章主要介紹了vite+react+tailwindcss的簡(jiǎn)單使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01