自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Axios 是時候退休了?我發(fā)現(xiàn)了一個更好的的選擇......

開發(fā)
如果你目前的項目:請求多,重復(fù)邏輯封裝比較多,并且有明顯的封裝痛點,比如:緩存、上傳、錯誤處理 等。那么可以考慮使用下 Alova。

Hello,大家好,我是 Sunday。

這幾年幫同學(xué)看代碼的時候,最常見的一個場景就是寫接口請求。很多同學(xué)也不用想,直接就上 axios!這點我完全理解,誰沒用過 axios 呢?社區(qū)成熟、文檔齊全、配置靈活,堪稱“前端請求的萬金油”。

但今天我想和你聊一個我最近用得非常爽的庫 —— Alova.js,它真的讓我意識到:我們對請求的認(rèn)知,是時候升級了!。

一、為什么我開始反思 Axios?

先說結(jié)論:不是 Axios 不好,而是它的設(shè)計理念已經(jīng)跟不上現(xiàn)在前端的節(jié)奏了。

想當(dāng)年,前端項目只是一些頁面交互,接口調(diào)用簡單粗暴,能發(fā)請求、能拿數(shù)據(jù)就夠用了。那時候,Axios 簡潔的 API、瀏覽器和 Node 的雙端兼容、攔截器機(jī)制,確實讓人眼前一亮,迅速成為了“前端標(biāo)配”。

但問題是:時代變了,項目需求也變了。

現(xiàn)代前端開發(fā)越來越復(fù)雜,我們不再滿足于“能用就行”,而是對請求有了更多“工程層面”的訴求,比如:

  • 請求是否支持 自動合并和去重?(重復(fù)請求真的太常見了)
  • 頁面卸載后,請求能自動取消嗎?否則容易觸發(fā)狀態(tài)更新警告或內(nèi)存泄露。
  • 多個組件用到了同一個接口,狀態(tài)怎么共享?難道還要封裝一個全局變量手動管理?
  • 在 SSR 場景下,如何優(yōu)雅地預(yù)取數(shù)據(jù)并注入客戶端?
  • 如何內(nèi)建支持 緩存策略、請求重試、上傳進(jìn)度監(jiān)聽 等需求,不需要每次都重復(fù)造輪子?

這一切問題的本質(zhì)是:我們需要的不只是一個能“發(fā)請求”的工具,而是一個能“管理請求”的體系。

而在這點上,Axios 不是不能實現(xiàn),而是你得親自去封裝、去維護(hù)、去踩坑。久而久之,它就像是一個“半成品”,你得自己把它打造成一個完整的“請求框架”。

于是我開始思考:

有沒有一款庫,可以把這些“現(xiàn)代需求”作為基礎(chǔ)能力開箱即用?能讓請求邏輯變得更語義化、更聲明式?

二、Alova 這才是現(xiàn)代請求庫該有的樣子

用了一段時間 Alova 后,我只想說:前端請求寫法,真的可以很“前端”。

1. 請求自動管理

以前你要寫請求防抖、重復(fù)合并、取消,得加很多 if + flag + 計時器。

在 Alova 中,直接配置:

useRequest(userAPI.get(1), {
  dedupe: true,           // 自動合并重復(fù)請求
  abortOnUnmount: true,   // 組件卸載時自動取消
  retry: 3                // 自動重試 3 次
});

你寫的不是“邏輯代碼”,而是“聲明你的意圖”,這才是現(xiàn)代開發(fā)應(yīng)有的體驗。

2. 請求自動響應(yīng)式

Axios 返回的是 Promise,Alova 返回的是一組響應(yīng)式數(shù)據(jù)。

比如 Vue 中:

const {
  data,
  loading,
  error,
  send
} = useRequest(() => userAPI.get({ id: 1 }));

請求狀態(tài)直接解構(gòu)出來,loading、error、data 全部響應(yīng)式,配合 template 寫起來非常爽。

3. 類型推導(dǎo)全自動,不用再“data.data”了

你是不是經(jīng)常這樣寫?

// 在全局響應(yīng)攔截器里已經(jīng) return res.data 了
axios.get<Response<User>>('/api/user')
  .then(res => res.data); // 但你還得寫類型 + 再拆一層 .data

又寫類型、又解構(gòu) data,重復(fù)勞動太多。

Alova 直接根據(jù)你定義的 API 返回值,自動推導(dǎo)類型,用起來非常干凈。

const userAPI = {
  get: (id: number) => alovaInst.Get<User>('/api/user', { params: { id } })
};

const { data: user } = useRequest(userAPI.get(1));
// user 會被自動推導(dǎo)為 User 類型,無需額外聲明

4. 攔截器?不,我們要更優(yōu)雅的中間件

Axios 攔截器一多,debug 都是噩夢,尤其是 request/response 各種嵌套,順序出錯還難查。

Alova 用的不是“攔截器”,而是類似中間件的“請求鉤子”機(jī)制,寫起來更聚焦:

const alova = createAlova({
  beforeRequest: (method) => {
    method.config.headers.token = getToken();
  },
  responded: (response) => response.json()
});

三、小總結(jié)

如果你目前的項目:請求多,重復(fù)邏輯封裝比較多,并且有明顯的封裝痛點,比如:緩存、上傳、錯誤處理 等。那么可以考慮使用下 Alova。

在使用 Alova 的時候,可以讓你的舊頁面繼續(xù)使用 axios,只在新功能中使用 Alova,這樣替換的風(fēng)險會更低。

責(zé)任編輯:趙寧寧 來源: 程序員Sunday
相關(guān)推薦

2021-10-29 11:45:26

Python代碼Python 3.

2022-11-30 09:18:51

JavaMyBatisMQ

2021-04-22 07:47:47

JavaJDKMYSQL

2024-05-20 08:25:55

2020-05-18 08:42:23

CSS背景圖像前端開發(fā)

2021-06-02 08:00:57

WebAsyncTas項目異步

2021-04-28 14:31:35

Dubbo接口日志

2023-02-26 01:02:22

2023-05-17 00:22:15

2020-04-01 08:40:44

Vue.jsweb開發(fā)

2024-06-03 11:43:55

2021-12-29 19:20:41

數(shù)據(jù)GitHub服務(wù)器

2020-06-09 08:05:11

Android 代碼操作系統(tǒng)

2019-01-14 11:10:43

機(jī)器學(xué)習(xí)人工智能計算機(jī)

2021-07-10 07:40:27

Excel數(shù)據(jù)分析大數(shù)據(jù)

2022-06-08 08:14:27

Dubbo數(shù)據(jù)包源代碼

2020-06-16 08:39:35

JavaScript圖像處理庫

2024-11-05 09:47:08

VGG網(wǎng)絡(luò)模型

2020-11-05 11:10:43

程序員開發(fā)工具

2024-11-08 14:18:38

點贊
收藏

51CTO技術(shù)棧公眾號