1、axios 的基本使用
1.1、簡介
在 Web 開發的演進歷程中,數據請求方式的變革至關重要。回溯早期,舊瀏覽器在向服務器請求數據時,存在嚴重弊端。由于返回的是整個頁面數據,每次請求都會導致頁面強制刷新,這不僅極大地影響了用戶體驗,還造成了網絡資源的極大浪費。畢竟,多數情況下我們僅僅需要更新頁面的部分內容,因此,異步網絡請求技術應運而生,Ajax 便是其中的典型代表。
Ajax(Asynchronous JavaScript and XML):作為異步網絡請求的先驅,它實現了頁面無刷新請求數據的功能,讓網頁能夠在不重新加載整個頁面的情況下與服務器進行數據交互。不過,實現 ajax 的方式雖多,但各有優劣。原生的 XMLHttpRequest 雖能實現基本的異步請求,但配置和調用方式極為繁瑣,開發者需要編寫大量復雜的代碼來處理各種細節,如創建請求對象、設置請求頭、處理響應等,這使得實現異步請求變得十分困難。
而 jQuery 的 ajax 方法極大地簡化了這一過程,它提供了簡潔易用的接口,讓開發者能夠輕松地進行異步請求。然而,引入整個 jQuery 框架只為使用 ajax 功能,無疑會增加項目的體積和復雜度,這在追求高效和輕量化的現代 Web 開發中并非最佳選擇。
Axios(ajax i/o system):它本質上是對原生 XMLHttpRequest 的封裝,卻為開發者帶來了全新的體驗。它可同時應用于瀏覽器和 nodejs 的 HTTP 客戶端,基于 Promise 的特性使其完美符合最新的 ES 規范。這意味著在使用 axios 時,開發者可以利用 Promise 的鏈式調用和簡潔的錯誤處理機制,讓異步代碼的編寫更加優雅和高效。
axios 具備以下顯著特點:
- 在瀏覽器中創建 XMLHttpRequest 請求:在實際的電商項目中,商品詳情頁往往需要展示商品的詳細信息、用戶評價等。使用 axios,開發者可以輕松地向服務器發送請求,獲取這些數據,并在不刷新頁面的情況下動態更新頁面內容,為用戶提供流暢的瀏覽體驗。
- 在 node.js 中發送 http 請求:以 Node.js 搭建的后端服務為例,當需要調用其他 API 接口獲取數據時,axios 提供了簡單便捷的方式。比如,在一個內容管理系統的后端,需要從第三方的圖片存儲服務獲取圖片信息,axios 就能派上用場。
- 支持 Promise API:在涉及多個異步請求的場景中,axios 對 Promise API 的支持尤為強大。例如,在一個社交應用中,需要同時獲取用戶的基本信息、好友列表和動態消息,通過 Promise.all () 方法結合 axios,就可以并行處理這些請求,大大提高了數據獲取的效率。
- 攔截請求和響應:在許多需要用戶認證的應用中,請求攔截器可以在請求發送前檢查用戶是否登錄,并在請求頭中添加認證信息,確保請求的安全性。而響應攔截器則可以在接收到響應后,對數據進行統一的格式轉換或錯誤處理。
- 轉換請求和響應數據:當服務器返回的數據格式不符合前端需求時,響應攔截器可以對數據進行格式轉換。比如,服務器返回的時間格式是時間戳,而前端需要展示成具體的日期時間格式,就可以在響應攔截器中進行轉換。
- 取消請求:在搜索功能中,用戶可能會頻繁輸入關鍵詞,導致多次發送請求。此時,使用 axios 的取消請求功能,可以取消之前未完成的請求,避免資源浪費,提高應用的性能。
- 自動轉換 JSON 數據:在前后端數據交互中,JSON 是最常用的數據格式之一。axios 能夠自動處理 JSON 數據的解析和序列化,無需開發者手動操作,大大提高了開發效率。
1.2、安裝
1.2.1、通過 cdn 引入
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
這種方式的優勢在于簡單快捷,無需進行復雜的安裝和配置步驟。對于一些小型項目或快速原型開發來說,直接通過 CDN 引入 axios,可以迅速開始使用其功能。例如,在一個簡單的個人博客頁面中,想要實現文章數據的動態加載,使用 CDN 引入 axios,就能快速完成數據請求和展示的功能。
1.3、基本使用
1.3.1、準備服務器
在模擬服務器時,json-server 是一個非常實用的工具。
- 安裝 json-server:
npm install -g json-server
通過全局安裝 json-server,我們可以在任何項目中方便地使用它。安裝完成后,在命令行中就可以直接調用 json-server 命令來啟動服務器。
- 創建數據源:
在空文件夾下創建 JSON 文件作為數據源,例如db.json
,示例數據如下:
{"list": [{"id": "1","name": "唐僧","age": 20,"address": "東土大唐"},{"id": "2","name": "孫悟空","age": 500,"address": "花果山"},{"id": "3","name": "豬八戒","age": 330,"address": "高老莊"},{"id": "4","name": "沙悟凈","age": 200,"address": "流沙河"},{"id": "5","name": "紅孩兒","age": 10,"address": "火焰山"}]
}
這個數據源可以用于模擬各種數據請求場景,比如在一個角色管理系統中,我們可以通過修改db.json
中的數據,來模擬不同角色的數據變化,進而測試前端頁面的數據展示和交互功能。
- 啟動服務器:
有多種啟動方式,每種方式都有其特點和適用場景。- 方式一:
json-server db.json
這是最基本的啟動方式,簡單直接,適用于快速啟動服務器進行初步測試。
- 方式二:
json-server --watch db.json
--watch
參數的作用非常強大,它可以實時監控文件的變化。當db.json
中的數據發生修改時,服務器會自動檢測到并更新數據,無需手動重啟服務器。這在開發過程中頻繁修改數據時非常方便,大大提高了開發效率。
- 方式三:
在與db.json
同級目錄創建package.json
文件,配置別名:
{"scripts":{"mock":"json-server --watch db.json --port 3001"}
}
然后通過npm run mock
啟動。這種方式在團隊開發中尤為重要,它可以統一項目的啟動命令,減少因啟動方式不一致而導致的問題。同時,通過配置--port
參數,可以指定服務器運行的端口,避免端口沖突。
1.3.2、各種請求方式
1.3.2.1、get 請求
get 請求主要用于獲取數據,請求指定的信息并返回實體對象。在下面的示例中,展示了三種處理請求結果的方法,其中推薦使用try...catch
方式,因為它的代碼結構更加清晰,錯誤處理更加直觀。
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><title>Document</title><script src="../js/axios.js"></script><!-- <script src="https://unpkg.com/axios/dist/axios.min.js"></script> --><style>#warp {width: 400px;margin: 50px auto;}.showUser {width: 400px;margin: 10px auto;height: 260px;border: 1px solid red;}li {line-height: 2;background-color: pink;margin: 10px;}</style>
</head><body><div id="warp"><button onclick="getInfo()">get請求</button><ul class="showUser"></ul></div><script>// get請求async function getInfo() {// 請求結果處理方法一:// axios.get("http://localhost:3000/list").then(// (res) => {// // 將請求到的結果進行渲染// render(res.data);// },// (err) => {// console.log(err);// }// );// 請求結果處理方法二:// axios// .get("http://localhost:3000/list")// .then((res) => {// // 將請求到的結果進行渲染// render(res.data);// })// .catch((err) => {// console.log(err);// });// 請求結果處理方法三:推薦使用第三種try {let res = await axios.get("http://localhost:3000/list");render(res.data);} catch (error) {console.log(err);}}// 渲染函數function render(data) {let showUser = document.querySelector(".showUser");let str = "";data.forEach((item) => {str += `<li>${item.name}<a href='#'>刪除</a></li>`;});showUser.innerHTML = str;}</script>
</body></html>
此外,get 請求還可以攜帶參數,有以下兩種常見方式:
// get請求帶參數方式一
// try {
// let res = await axios.get("http://localhost:3000/list?id=1");
// render(res.data);
// } catch (error) {
// console.log(err);
// }
// get請求帶參數方式二
try {let res = await axios.get("http://localhost:3000/list", {params: {id: 2,},});render(res.data);
} catch (error) {console.log(err);
}
在實際應用中,比如在一個商品查詢功能中,我們可以通過傳遞不同的參數,獲取不同商品的詳細信息。
1.3.2.2、post 請求:
post 請求通常用于向指定資源提交數據,如表單提交或文件上傳。在下面的示例中,通過axios.post
方法提交數據,提交后重新獲取數據并渲染,展示了如何在實際應用中使用 post 請求進行數據添加操作。
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><title>Document</title><script src="../js/axios.js"></script><style>#warp {width: 400px;margin: 50px auto;}.showUser {width: 400px;margin: 10px auto;height: 260px;border: 1px solid red;}li {line-height: 2;background-color: pink;margin: 10px;}</style>
</head><body><div id="warp"><button onclick="postInfo()">post請求</button><ul class="showUser"></ul></div><script>// post請求async function postInfo() {await axios.post("http://localhost:3000/list",{name: "蜘蛛精",age: 200,address: "盤絲洞",});// 重新獲取數據,渲染let res = await axios.get("http://localhost:3000/list");render(res.data);// console.log(res.data);}// 渲染函數function render(data) {let showUser = document.querySelector(".showUser");let str = "";data.forEach((item) => {str += `<li>${item.name}<a href='#'>刪除</a></li>`;});showUser.innerHTML = str;}</script>
</body></html>
在一個用戶注冊功能中,就可以通過 post 請求將用戶填寫的注冊信息提交到服務器,實現用戶注冊的功能。
1.3.2.3、put 請求:
put 請求用于更新數據,從客戶端向服務器傳送的數據會取代指定文檔的內容。需要特別注意的是,put 請求會把更新的數據完全替代原數據,如果只修改了部分數據,原數據其他內容都會丟失。
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><title>Document</title><script src="../js/axios.js"></script><style>#warp {width: 400px;margin: 50px auto;}.showUser {width: 400px;margin: 10px auto;height: 260px;border: 1px solid red;}li {line-height: 2;background-color: pink;margin: 10px;}</style>
</head><body><div id="warp"><button onclick="putInfo()">put請求-修改數據</button><ul class="showUser"></ul></div><script>// put請求async function putInfo() {let res = await axios.put("http://localhost:3000/list/1", {name: "玉皇大帝",});// 渲染getData()}// 重新獲取數據,渲染async function getData() {let res = await axios.get("http://localhost:3000/list");render(res.data);}// 渲染函數function render(data) {let showUser = document.querySelector(".showUser");let str = "";data.forEach((item) => {str += `<li>${item.name}<a href='#'>刪除</a></li>`;});showUser.innerHTML = str;}</script>
</body></html>
在一個用戶信息修改功能中,如果使用 put 請求,一定要確保提交的數據完整,否則可能會導致部分數據丟失。
1.3.2.4、patch 請求:
patch 請求也是用于更新數據,它是對 put 方法的補充,主要用于對已知資源進行局部更新。
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><title>Document</title><script src="../js/axios.js"></script><style>#warp {width: 400px;margin: 50px auto;}.showUser {width: 400px;margin: 10px auto;height: 260px;border: 1px solid red;}li {line-height: 2;background-color: pink;margin: 10px;}</style>
</head><body><div id="warp"><button onclick="patchInfo()">patch請求-修改數據</button><ul class="showUser"></ul></div><script>// patch請求async function patchInfo() {let res = await axios.patch("http://localhost:3000/list/2", {name: "王母娘娘",});// 渲染getData();}// 重新獲取數據,渲染async function getData() {let res = await axios.get("http://localhost:3000/list");render(res.data);}// 渲染函數function render(data) {let showUser = document.querySelector(".showUser");let str = "";data.forEach((item) => {str += `<li>${item.name}<a href='#'>刪除</a></li>`;});showUser.innerHTML = str;}</script>
</body></html>
在一個商品庫存更新功能中,我們可能只需要更新庫存數量,而不影響其他商品信息,這時使用 patch 請求就非常合適。
1.3.2.5、delete 請求:
delete 請求用于請求服務器刪除指定的數據。
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><title>Document</title><script src="../js/axios.js"></script><style>#warp {width: 400px;margin: 50px auto;}.showUser {width: 400px;margin: 10px auto;height: 260px;border: 1px solid red;}li {line-height: 2;background-color: pink;margin: 10px;}</style></head><body><div id="warp"><button onclick="deleteInfo()">delet請求-修改數據</button><ul class="showUser"></ul></div><script>// delete請求async function deleteInfo() {let res = await axios.delete("http://localhost:3000/list/1");// 渲染getData();}// 重新獲取數據,渲染async function getData() {let res = await axios.get("http://localhost:3000/list");render(res.data);}// 渲染函數function render(data) {let showUser = document.querySelector(".showUser");let str = "";data.forEach((item) => {str += `<li>${item.name}<a href='#'>刪除</a></li>`;});showUser.innerHTML = str;}</script></body>
</html>
1.3.3、axios 的配置
配置的優先級為:請求配置 > 實例配置 > 全局配置,這種優先級設置讓開發者能靈活地根據不同場景對 axios 請求進行配置 。
- 全局配置:通過
axios.defaults
進行全局配置,這些配置會應用到所有的 axios 請求中。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8" /><title>Document</title><script src="../js/axios.js"></script>
</head>
<body><button id="btn" onclick="getData()">發送請求</button><script>//配置全局的超時時長axios.defaults.timeout = 2000;//配置全局的基本URLaxios.defaults.baseURL = "http://localhost:3000";async function getData() {try {let res1 = await axios.get("/list");let res2 = await axios.get("/user");console.log(res1.data);console.log(res2.data);} catch (error) {console.log(error);}}</script>
</body>
</html>
在一個多頁面應用中,可能所有頁面的請求都需要設置相同的超時時間和基本 URL,使用全局配置就能很方便地實現這一點,避免在每個請求中重復設置。
- 實例配置:在大型項目中,不同的業務模塊可能有不同的請求配置需求,為避免沖突,可創建 axios 的實例并進行配置。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8" /><title>Document</title><script src="../js/axios.js"></script>
</head>
<body><button id="btn" onclick="getData()">發送請求</button><script>async function getData() {// 創建實例1,創建同時配置let instance = axios.create({baseURL: "http://localhost:3000",timeout: 2000,});let res = await instance.get("/list");console.log(res.data);// 創建實例2,現創建,再配置let instance2 = axios.create();instance2.defaults.timeout = 2;instance2.defaults.baseURL = "http://localhost:3000";let res2 = await instance.get("/user");console.log(res2.data);}</script>
</body>
</html>
例如,一個電商項目中,商品相關的請求和用戶相關的請求可能需要不同的超時時間或請求頭設置,通過創建不同的實例就可以分別進行配置,互不干擾。
axios 實例常用配置:
-
baseURL:請求的域名,基本地址,類型:String,用于設置請求的基礎路徑。在前后端分離的項目中,根據不同的環境(開發、測試、生產)設置不同的
baseURL
,方便切換不同環境的接口地址。 -
timeout:請求超時時長,單位 ms,類型:Number,用于設置請求的超時時間。在網絡不穩定的情況下,合理設置超時時間可避免請求長時間等待,提升用戶體驗。
-
url:請求路徑,類型:String,用于設置具體的請求路徑。根據不同的業務需求,設置不同的請求路徑,如獲取用戶信息的路徑為
/user
,獲取訂單信息的路徑為/order
。 -
method:請求方法,類型:String,如
GET
、POST
、PUT
、PATCH
、DELETE
等。根據不同的業務操作,選擇合適的請求方法,如獲取數據用GET
,提交數據用POST
。 -
headers:設置請求頭,類型:Object,用于設置請求的頭部信息。比如在請求頭中添加
Content-Type
,指定請求體的數據格式,或者添加認證信息。 -
params:請求參數,將參數拼接在 URL 上,類型:Object,用于傳遞查詢參數。在搜索功能中,可通過
params
傳遞搜索關鍵詞。 -
data:請求參數,將參數放到請求體中,類型:Object,用于傳遞請求體數據。在提交表單數據時,可將表單數據放在
data
中。 -
請求配置:可以在單個請求中進行配置,這種方式可以針對特定請求進行個性化配置,覆蓋全局配置和實例配置。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8" /><title>Document</title><script src="../js/axios.js"></script>
</head>
<body><button id="btn" onclick="getData()">發送請求</button><script>async function getData() {let res = await axios.get("http://localhost:3000/list", {timeout: 2000,});console.log(res.data);}</script>
</body>
</html>
比如在一個需要快速獲取數據的場景中,可單獨設置某個請求的超時時間為更短的值,以滿足特定的業務需求。
1.3.4、axios 的攔截器
axios 提供了兩大類攔截器,分別是請求方向的攔截(成功請求,失敗請求)和響應方向的攔截(成功的,失敗的)。攔截器在網絡請求過程中扮演著非常重要的角色,它可以在發起請求或者響應時對操作進行處理。
- 請求攔截器:在發送請求前進行一系列處理。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8" /><title>Document</title><script src="../js/axios.js"></script>
</head>
<body><button id="btn" onclick="getData()">發送請求</button><script>// 請求攔截器async function getData() {axios.interceptors.request.use((config) => {// 發生請求前的一系列的處理console.log("開啟加載動畫");console.log("認證是否有token,如果沒有,要去登錄");return config; //攔截后的放行},(err) => {// 請求錯誤處理return Promise.reject(err);});let res = await axios.get("http://localhost:3000/list");console.log(res.data);}</script>
</body>
</html>
在一個需要用戶登錄才能訪問某些功能的應用中,可在請求攔截器中檢查用戶是否登錄,未登錄則跳轉到登錄頁面;還可以在請求頭中添加一些通用的參數,如版本號、設備信息等。
- 響應攔截器:在接收到響應后進行一系列處理。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8" /><title>Document</title><script src="../js/axios.js"></script>
</head>
<body><button id="btn" onclick="getData()">發送請求</button><script>// 響應攔截器async function getData() {axios.interceptors.response.use((config) => {// 數據回來前的一系列的處理console.log("關閉加載動畫");console.log("對數據進行一些數據");return config.data; //攔截后的放行},(err) => {// 響應錯誤處理return Promise.reject(err);});let res = await axios.get("http://localhost:3000/list");console.log(res.data);}</script>
</body>
</html>
在一個返回數據需要格式化的場景中,可在響應攔截器中對數據進行格式化處理;或者根據響應狀態碼進行統一的錯誤提示,如 404 提示頁面未找到,500 提示服務器錯誤等。
- 取消攔截:可以取消攔截器。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8" /><title>Document</title><script src="../js/axios.js"></script>
</head>
<body><button id="btn" onclick="getData()">發送請求</button><script>// 請求攔截器async function getData() {let instance = axios.create();instance.interceptors.request.use((config) => {// 發生請求前的一系列的處理console.log("開啟加載動畫");console.log("認證是否有token,如果沒有,要去登錄");return config; //攔截后的放行},(err) => {// 請求錯誤處理return Promise.reject(err);});// 取消攔截axios.interceptors.request.eject(instance);let res = await axios.get("http://localhost:3000/list");console.log(res.data);}</script>
</body>
</html>
在某些特殊的測試場景中,或者臨時需要繞過某些攔截器的處理時,可以使用取消攔截功能 。
2、Vue 中 axios 的使用
2.1、基本使用
- npm 安裝:在終端使用
npm install axios
安裝 axios,這是在 Vue 項目中使用 axios 的常見方式。安裝完成后,axios 會被添加到項目的node_modules
目錄中,項目可以引入并使用它。 - ** 在 Vue 原型上配置:在項目的文件中引入,并將其掛載到原型上,這樣在組件中就可以通過axios` 來使用 axios。
// 導入axios
import axios from 'axios'
// 將axios放到Vue原型上,這樣vm,vc身上就都有axios了
Vue.prototype.$axios=axios
通過這種方式,在 Vue 組件中可以方便地調用 axios 進行數據請求,無需在每個組件中重復引入 axios。
- 在組件中使用:在組件中通過
this.$axios
發送請求。
<button @click="getDate">點擊發送請求</button>
<script>
export default {name: 'App',methods: {async getDate() {let res = await this.$axios.get('http://localhost:3000/list')console.log(res.data);}}
}
</script>
在一個商品列表組件中,可通過點擊按鈕,使用this.$axios
獲取商品列表數據并展示在頁面上。
2.2、一次封裝
如果多個組件都需要發送請求,且每次請求前都要進行一些驗證處理等,可以進行簡單封裝。
- 封裝 request.js:在
src/utils
創建request.js
,創建 axios 實例并進行配置,添加請求攔截器和響應攔截器。
/* 封裝axios用于發送請求 */
import axios from "axios";/*
(1)request 相當于 Axios 的實例對象
(2)為什么要有request,而不是直接用axios* 項目開發中,有可能會有兩個基地址* 不同的接口配置不同(有的要token,有的不要token)
*/
const request = axios.create({baseURL: "http://localhost:3000", // 設置基地址timeout: 2000, // 請求超時:當2s沒有響應就會結束請求
});// 添加請求攔截器,一下內容是axios的攔截器,可以不用寫
request.interceptors.request.use(function (config) {// 發請求前做的一些處理,數據轉化,配置請求頭,設置token,設置loading等,根據需求去添加// 例如1config.data = JSON.stringify(config.data); // 數據轉化,也可以使用qs轉換// 例如2config.headers = {"Content-Type": "application/x-www-form-urlencoded", // 配置請求頭};// 例如3//注意使用token的時候需要引入cookie方法或者用本地localStorage等方法,推薦js-cookieconst token = getCookie("名稱"); // 這里取token之前,你肯定需要先拿到token,存一下if (token) {config.params = { token: token }; // 如果要求攜帶在參數中config.headers.token = token; // 如果要求攜帶在請求頭中}return config; //攔截后的放行}, function (error) {// 對請求錯誤做些什么return Promise.reject(error);}
);// 添加響應攔截器
request.interceptors.response.use(function (response) {// 對響應數據做點什么console.log('關閉請求數據動畫');console.log('對數據進行處理');return response.data; //只要響應對象中的數據},function (error) {// 對響應錯誤做點什么return Promise.reject(error);}
);export default request;
在一個需要用戶登錄的應用中,可在請求攔截器中統一處理 token 驗證,確保每個請求都攜帶有效的認證信息;在響應攔截器中統一處理錯誤提示,根據不同的錯誤類型給用戶友好的提示。
- 組件中使用:在組件中引入封裝后的
request
。
<script>import request from '../utils/request'export default {name: 'ShowList',methods: {async getList() {// 基本路徑已經配置過let res = await request.get('/list')//這里的res也是響應攔截器里處理之后的結果console.log(res);}}}
</script>
<script>
import request from '@/utils/request';
export default {name: 'ShowUser',methods: {async getUser() {let res = await request.get('/user')console.log(res);}}}
</script>
在一個用戶管理組件中,可通過引入request
,方便地發送獲取用戶列表、添加用戶、修改用戶等請求,并且無需重復編寫請求攔截和響應處理的代碼。
2.3、二次封裝
項目中頁面較多,每個頁面多次請求時,將請求寫在頁面中難以維護,可再次進行封裝。
- src/apis/showList.js:導入一次封裝的
request
,封裝具體的請求函數。
// 導入一次封裝的request
import request from "@/utils/request";
// 請求list數據
export function getListInfo1() {return request.get("/list");
}
// 請求user數據
export function getUserInfo1() {return request.get("/user");
}
在一個電商項目中,可在src/apis
目錄下創建多個文件,分別封裝商品、訂單、用戶等相關的請求函數,使代碼結構更加清晰,便于維護和管理。
- showList.vue:在組件中引入封裝后的請求函數。
<script>
import { getListInfo1, getUserInfo1 } from '../apis/showList'
export default {name: 'ShowList',methods: {async getList1() { // 調用請求函數let res = await getListInfo1()console.log(res);},async getUser1() {let res = await getUserInfo1()console.log(res);}}
}
</script>
在一個商品列表頁面中,可通過調用getListInfo1
獲取商品列表數據,在用戶詳情頁面中,可通過調用getUserInfo1
獲取用戶詳情數據,進一步提高代碼的復用性和可維護性。
3、axios 小案例
3.1、表格的添加
在實際項目中,表格添加功能通常涉及到數據的提交和更新。使用 axios 發送 post 請求,將用戶輸入的數據提交到服務器,服務器處理后返回新的數據列表,再通過 axios 獲取最新數據并重新渲染表格,展示添加后的數據。在一個員工管理系統中,可通過表格添加功能,添加新員工的信息,提交后刷新表格,展示最新的員工列表。用戶在前端界面填寫新員工的姓名、年齡、職位等信息,點擊提交按鈕后,axios 將數據發送到服務器,服務器將數據保存到數據庫并返回更新后的員工列表數據,前端接收到數據后重新渲染表格,讓用戶看到最新的員工信息。
3.2、天氣案例
在天氣案例中,通過 axios 向天氣 API 發送 get 請求,獲取城市的天氣信息,如溫度、濕度、天氣狀況等。可以根據不同的天氣狀況展示相應的圖標和提示信息,為用戶提供直觀的天氣展示。同時,可以設置緩存機制,避免頻繁請求 API,提高用戶體驗。比如在一個天氣預報應用中,可根據獲取的天氣狀況,展示對應的晴天、雨天、多云等圖標,同時設置緩存,在一定時間內不再重復請求相同城市的天氣數據。當用戶打開應用時,axios 向天氣 API 發送請求獲取當前城市的天氣信息,將溫度、濕度等數據展示在頁面上,并根據天氣狀況展示對應的圖標。如果用戶在短時間內多次打開應用,應用會先檢查緩存中是否有最新的天氣數據,如果有則直接展示,避免重復請求 API,減少網絡流量和提高響應速度。