<p id="m2nkj"><option id="m2nkj"><big id="m2nkj"></big></option></p>
    <strong id="m2nkj"></strong>
    <ruby id="m2nkj"></ruby>

    <var id="m2nkj"></var>
  • 改變axios的用法后,我的工作效率提升了3倍

    共 5640字,需瀏覽 12分鐘

     ·

    2023-11-11 01:27

    作者:古韻

    原文:https://juejin.cn/post/7277029942298329125

    實(shí)際場(chǎng)景下的請(qǐng)求問題

    作為前端開發(fā),網(wǎng)絡(luò)請(qǐng)求肯定是我們經(jīng)常要面對(duì)的事情,在前端請(qǐng)求中,axios和fetch API應(yīng)該是我們最常用的請(qǐng)求工具了,它們?cè)诎l(fā)送請(qǐng)求和接收響應(yīng)數(shù)據(jù)已經(jīng)做到了足夠簡(jiǎn)單。

    但在實(shí)際項(xiàng)目中,為了達(dá)到更好的用戶體驗(yàn),我們還需要考慮下面這幾個(gè)因素:

    1. 展示加載中的請(qǐng)求狀態(tài)
    2. 展示請(qǐng)求錯(cuò)誤狀態(tài)
    3. 展示上傳/下載文件的進(jìn)度信息

    上面這些都需要我們編寫額外的代碼,增加了不少的工作量,你的請(qǐng)求代碼可能是下面這樣的,我們以vue3代碼為示例。

    js
    復(fù)制代碼
    const loading = ref(false);  
    const data = ref({});  
    const error = ref(null);  
    const request = async () => { 
      try {  
        loading.value = true;  
        data.value = await axios.get('/xxx');  
      } catch (e) {  
        error.value = e;  
      }
      loading.value = false;  
    };
    onMounted(request);

    如果面對(duì)大量的api,這工作量可想而知,想到這時(shí)就有點(diǎn)頭疼啊。有沒有一種方法可以自動(dòng)幫我處理這些邏輯,讓請(qǐng)求代碼看起來更簡(jiǎn)潔呢?

    解決

    我們可以用封裝的思路,把上面這些都封裝為一個(gè)簡(jiǎn)單的use hook,就可以很好地解決了,封裝后的代碼大概是下面這樣的。

    export const useRequest = (url) => {
      const loading = ref(false);
      const data = ref({});
      const error = ref(null);
      const request = async () => {
        try {
          loading.value = true;
          data.value = await axios.get(url);
        } catch (e) {
          error.value = e;
        }
        loading.value = false;
      }
      onMounted(request);

      return {
        loading,
        data,
        error
      };
    }

    這是一個(gè)最簡(jiǎn)單的use hook實(shí)現(xiàn),它幫我們解決了請(qǐng)求模板代碼的問題。當(dāng)然你還可以使用use hook封裝更多更高級(jí)的請(qǐng)求功能,而這些功能現(xiàn)在不必你自己封裝了,使用alova[1]就可以了。

    alova 是一個(gè)輕量級(jí)的請(qǐng)求策略庫,針對(duì)分頁請(qǐng)求、表單提交、上傳和下載文件等不同請(qǐng)求場(chǎng)景使用對(duì)應(yīng)的請(qǐng)求模塊,讓開發(fā)者使用非常少量的代碼就可以實(shí)現(xiàn)高可用性和高流暢性的請(qǐng)求功能,這意味著,你再也不需要自己絞盡腦汁編寫請(qǐng)求優(yōu)化代碼,再也不需要自己維護(hù)請(qǐng)求數(shù)據(jù)和相關(guān)狀態(tài),你只需要選擇并使用請(qǐng)求模塊,設(shè)置參數(shù)后,alova 幫你搞定!

    在引入alova后,我的工作效率直接提高了3倍,強(qiáng)烈推薦給大家。

    你可以將alova理解成是axios或fetch-api等請(qǐng)求工具的一種武器裝備,將alova與請(qǐng)求工具配合使用將會(huì)讓它們變得更加強(qiáng)大。

    其實(shí),alova底層依然依賴axios或fetch-api等請(qǐng)求函數(shù)進(jìn)行請(qǐng)求,因此你仍然可以使用你喜歡的請(qǐng)求庫。

    以下是一個(gè)基于vue3+axios+alova的使用示例,alova將自動(dòng)為你創(chuàng)建請(qǐng)求相關(guān)的,可以直接用于視圖的響應(yīng)式狀態(tài),代碼如下:

    可運(yùn)行的示例點(diǎn)此去查看[2]

    <template>
      <div v-if="loading">Loading...</div>
      <div v-else-if="error">{{ error.message }}</div>
      <span v-else>responseData: {{ data }}</span>
    </template>

    <script setup>
    import { createAlova, useRequest } from 'alova';
    import VueHook from 'alova/vue';
    import { axiosRequestAdapter } from '@alova/adapter-axios';

    const alovaInstance = createAlova({
      statesHook: VueHook,

      // 設(shè)置使用axios作為請(qǐng)求工具
      requestAdapter: axiosRequestAdapter()
    });

    const {
      // 加載狀態(tài)
      loading,

      // 響應(yīng)數(shù)據(jù)
      data,

      // 錯(cuò)誤信息,請(qǐng)求錯(cuò)誤時(shí)才有值
      error
    } = useRequest(alovaInstance.Get('/todoList'));
    </script>

    是不是非常nice!!!之前需要我們自己實(shí)現(xiàn)的各種功能,alova 都幫我們做了。

    alova在過去3個(gè)月對(duì)外發(fā)布以來在github上已收到了 1500+star,我們需要您寶貴的star支持[3]

    目前,alova已經(jīng)創(chuàng)新性地實(shí)現(xiàn)了在vue options中完美使用,也就是在vue2 options寫法中也可以使用use hook了,感興趣請(qǐng)移步查看[4]

    總結(jié)

    alova目前提供了8種請(qǐng)求策略,如果你希望在不同的請(qǐng)求場(chǎng)景下方便地實(shí)現(xiàn)特定的請(qǐng)求需求,那千萬別錯(cuò)過它哦。alova 還提供了緩存管理、請(qǐng)求共享等更多功能,可以覆蓋絕大多數(shù)請(qǐng)求場(chǎng)景。

    所以,在你的下一個(gè)項(xiàng)目中,你也可以來試試 alova,一定能給你帶來更愉快的開發(fā)體驗(yàn)!

    結(jié)尾

    同學(xué),要是覺得對(duì)你有用請(qǐng)幫忙點(diǎn)個(gè)贊或收藏!

    相關(guān)信息

    alova官網(wǎng)[5]

    alova Github地址[6]

    參考資料

    [1]

    https://alova.js.org: https://link.juejin.cn?target=https%3A%2F%2Falova.js.org

    [2]

    https://alova.js.org/tutorial/example/init-page: https://link.juejin.cn?target=https%3A%2F%2Falova.js.org%2Ftutorial%2Fexample%2Finit-page

    [3]

    https://github.com/alovajs/alova: https://link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Falovajs%2Falova

    [4]

    https://alova.js.org/zh-CN/tutorial/framework/vue-options: https://link.juejin.cn?target=https%3A%2F%2Falova.js.org%2Fzh-CN%2Ftutorial%2Fframework%2Fvue-options

    [5]

    https://alova.js.org/: https://link.juejin.cn?target=https%3A%2F%2Falova.js.org%2F

    [6]

    https://github.com/alovajs/alova: https://link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Falovajs%2Falova

    最后



    如果你覺得這篇內(nèi)容對(duì)你挺有啟發(fā),我想邀請(qǐng)你幫我個(gè)小忙:

    1. 點(diǎn)個(gè)「喜歡」或「在看」,讓更多的人也能看到這篇內(nèi)容

    2. 我組建了個(gè)氛圍非常好的前端群,里面有很多前端小伙伴,歡迎加我微信「sherlocked_93」拉你加群,一起交流和學(xué)習(xí)

    3. 關(guān)注公眾號(hào)「前端下午茶」,持續(xù)為你推送精選好文,也可以加我為好友,隨時(shí)聊騷。



    點(diǎn)個(gè)喜歡支持我吧,在看就更好了


    瀏覽 1152
    點(diǎn)贊
    評(píng)論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報(bào)
    評(píng)論
    圖片
    表情
    推薦
    點(diǎn)贊
    評(píng)論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報(bào)
    <p id="m2nkj"><option id="m2nkj"><big id="m2nkj"></big></option></p>
    <strong id="m2nkj"></strong>
    <ruby id="m2nkj"></ruby>

    <var id="m2nkj"></var>
  • 国产精品久久久久久精 | 18禁国产精品久久久久 | 国产波霸巨爆乳无码视频在线 | 久久艹影院 | 日韩熟妇| 黄色毛片av成人免费 | 超碰福利导航 | 欧美成人精品二区免费 | 四虎成人网 | 美女高潮视频在线观看免费视频 |