記錄--alova組件使用方法(區別axios)

来源:https://www.cnblogs.com/smileZAZ/archive/2023/11/16/17837143.html
-Advertisement-
Play Games

這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 在我們寫項目代碼時,應該更加專註於業務邏輯的實現,而把定式代碼交給js庫或工程化自動處理,而我想說的是,請求邏輯其實也是可以繼續簡化的。 你可能會說,用axios或fetch api就夠了啊,哪有什麼請求邏輯,那可能是你還沒有意識到這個問 ...


這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助

在我們寫項目代碼時,應該更加專註於業務邏輯的實現,而把定式代碼交給js庫或工程化自動處理,而我想說的是,請求邏輯其實也是可以繼續簡化的。

你可能會說,用axios或fetch api就夠了啊,哪有什麼請求邏輯,那可能是你還沒有意識到這個問題,作為一個前端開發,你肯定也遇到過這些問題:

  • 處理分頁邏輯
  • 表單處理邏輯
  • 處理請求防抖邏輯
  • 處理輪詢檢查
  • 處理緩存處理
  • 處理載入狀態
  • 處理錯誤處理
  • 驗證碼發送
  • 文件上傳
  • ...

這些問題,如果你正在使用 axios 或 fetch api,你需要編寫大量的代碼來處理這些問題,但我想說,他們其實更多的也都是固定的模板代碼,也可以被精簡掉。

在今天你可以使用 alova 來處理它們,alova提供了大量日常業務中常用的請求模塊,你只需要簡單配置幾行代碼,alova 就能自動幫你管理請求狀態,優化網路體驗,那些煩人的分頁邏輯、輪詢檢查、緩存處理,全都不用你操心了,讓你更加專註於業務邏輯。

alova的學習成本更低

alova 借鑒了 axios 和ahooks-useRequest的設計,讓大家更容易上手,學習成本更低。

alova 官網在這裡。

alova 自從 2023 年 4 月份正式對外發佈以來,在 Issues 和 Disscussion 中收到了來自世界各地的開發者積极參与的信息,深感榮幸。

如果你也喜歡 alovajs,請在Github 倉庫中貢獻一顆 star,這對我們非常重要。

有任何問題,你可以加入以下群聊咨詢,也可以在github 倉庫中發佈 Discussions,如果遇到問題,也請在github 的 issues中提交,我們會在最快的時間解決。

下麵我們來看看如何通過簡單配置,就能幫你解決各種複雜場景下的請求問題。

基礎請求

基本的請求,適用於初始化信息,自帶了請求相關的各種狀態。

以 vue3 為例。

<template>
  <div>
    <div v-if="loading">loading...</div>
    <div v-else-if="error">error: {{ error }}</div>
    <div v-else>
      <div>
        <span>id: {{ data.title }}</span>
        <span>title: {{ data.time }}</span>
      </div>
    </div>
  </div>
</template>

<script setup>
  import { useRequest } from "alova";

  // 和axios相似的參數風格
  const todoDetail = alova.Get("/todo", {
    params: {
      id: 1,
    },
  });

  const {
    loading,
    data,
    error,
    onSuccess,
    onError,
    onComplete,
    send,
    abort,
    update,
  } = useRequest(todoDetail);
  onSuccess((event) => {
    console.log("success", event);
  });
  onError((event) => {
    console.log("error", event);
  });
  onComplete((event) => {
    console.log("complete", event);
  });
</script>

useRequest 會自動幫你管理 loading、data、error 等狀態,不需要自己控制!

useRequest 詳細文檔

狀態變化請求

在數據篩選、搜索等交互中,可以通過 useWatcher 來監聽狀態變化併發送請求,返回值也包含與 useRequest 相同的狀態、事件函數、操作函數。

useWatcher(() => filterTodoList(page, keyword), [keyword, page], {
  debounce: [500, 0], // 請求級的防抖參數
});

它還有請求防抖、保證請求時序、過濾狀態變化時是否發送請求等功能,超方便!

useWatcher 詳細文檔

預載入數據

可以用 useFetcher 預載入數據,不需要直接處理響應,但會更新相關狀態:

const { fetching, error, fetch } = useFetcher();
fetch(todoDetail);

useFetcher 詳細文檔

分頁請求

分頁場景下,page、pageSize、pageCount、total 等等好多狀態要自己維護,還要寫一堆邏輯來判斷何時應該發送請求!

如果用 alovajs 提供的分頁 Hook,你就只需要這樣:

const {
  // 載入狀態
  loading,

  // 列表數據
  data,

  // 是否為最後一頁
  // 下拉載入時可通過此參數判斷是否還需要載入
  isLastPage,

  // 當前頁碼,改變此頁碼將自動觸發請求
  page,

  // 每頁數據條數
  pageSize,

  // 分頁頁數
  pageCount,

  // 總數據量
  total,
} = usePagination((page, pageSize) => queryStudents(page, pageSize));

// 翻到上一頁,page值更改後將自動發送請求
const handlePrevPage = () => {
  page.value--;
};

// 翻到下一頁,page值更改後將自動發送請求
const handleNextPage = () => {
  page.value++;
};

// 更改每頁數量,pageSize值更改後將自動發送請求
const handleSetPageSize = () => {
  pageSize.value = 20;
};

是不是清爽很多,節省了超多重覆代碼。

usePagination 詳細文檔

表單提交

表單處理也很頭疼吧?alova 的 useForm 直接幫你搞定表單提交、表單草稿、自動重置表單項、多頁共用數據啥的。

const {
  form,
  send: submitForm,
  updateForm,
} = useForm((formData) => submitData(formData), {
  initialForm: {
    title: "",
    content: "",
    time: "",
  },
  resetAfterSubmiting: true,
});

useForm 詳細文檔

驗證碼實現

別再自己做倒計時了,這有!

const { loading: sending, send: sendCaptcha } = useCaptcha(
  () => sendCaptcha(mobile),
  {
    initialCountdown: 60,
  }
);

useCaptcha 詳細文檔

文件上傳策略

更簡單的文件上傳策略,支持對 base64、Blob、ArrayBuffer、Canvas 數據的自動識別和轉換,還可以多文件同時上傳、圖片預覽圖生成

const {
  fileList
  loading,
  progress
} = useUploader(({ file, name }) => uploadFile(file, name), {
  limit: 3,
  accept: ['png', 'jpg', 'gif'],
  imageTempLink: true
});

useUploader 詳細文檔

自動重新拉取數據

可以在瀏覽器 tab 切換時拉取最新數據、瀏覽器聚焦時拉取最新數據、網路重連時拉取最新數據、輪詢請求自動重新拉取數據,可以同時配置以上的一個或多個觸發條件,也可以配置節流時間來防止短時間內觸發多次請求,例如 1 秒內只允許觸發一次。

useAutoRequest(todoDetail, {
  enablePolling: 2000,
  enableVisibility: true,
  enableFocus: true,
  enableNetwork: true,
  throttle: 1000
}

useAutoRequest 詳細文檔

跨組件請求策略

跨組件或模塊觸發請求相關操作,消除組件層級的限制,在任意組件中快速地觸發任意請求的操作函數,例如,你可以某個組件中更新了菜單數據後,重新觸發側邊菜單欄的重新請求,從而刷新數據。當操作了列表數據後,觸發列表更新。

// 組件A創建代理
useRequest(todoDetail, {
  middleware: actionDelegationMiddleware("someAction"),
});

// 組件B內觸發操作
accessAction("someAction", (actions) => {
  actions.send();
});

actionDelegationMiddleware 詳細文檔

請求重試策略

在重要的請求上使用它,可以提高請求的穩定性,可以自定義設置是否重試,以及重試延遲,還有手動停止重試

const { onRetry, onFail, stop } = useRetriableRequest(pay, {
  retry(error) {
    return /network timeout/i.test(error.message);
  },
  backoff: {
    delay: 2000,
  },
});

useRetriableRequest 詳細文檔

SSE

可以直接通過 SSE 進行請求,它可以通過全局響應和方法實例的函數 transformData 自動轉換數據,還提供了對 EventSource 對象的全部控制。

const { readyState, data, eventSource, onMessage, onError, onOpen, on } =
  useSSE(() => chatGPT(), {
    withCredentials: true,
    interceptByGlobalResponded: true,
  });

useSSE 詳細文檔

本文轉載於:

https://juejin.cn/post/7301281320666693667

如果對您有所幫助,歡迎您點個關註,我會定時更新技術文檔,大家一起討論學習,一起進步。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 簡介 SQL(Structured Query Language)是一種用於訪問和操作關係型資料庫的標準語言。它是一個功能強大的語言,用於執行各種資料庫操作,包括檢索數據、插入新記錄、更新記錄、刪除記錄、創建資料庫、創建新表、設置許可權以及執行存儲過程和視圖等。以下是 SQL 的一些重要方面: SQL ...
  • sql server 2005安裝包sql server 2005 SP4補丁包(非常難找,留作備用) 鏈接: https://pan.baidu.com/s/1j5OOX-iV8gLrmSNqNLE-kg 提取碼: jvtr 複製這段內容後打開百度網盤手機App,操作更方便哦 背景: 在windo ...
  • 嘗試用node編寫一個簡單的登錄介面,結果啟動服務後請求介面出現了該錯誤。 其問題就是訪問的工具身份驗證協議過於落後,在node內安裝的2.18.1 mysql包。 解決: 先登錄資料庫。 use mysql;(mysql為資料庫名) 提示Database changed; 查詢表中信息 ; sel ...
  • 本文以GaussDB資料庫為平臺,將詳細介紹SQL中DROP、TRUNCATE和DELETE等語句的含義、使用場景以及註意事項,幫助讀者更好地理解和掌握這些常用的資料庫操作命令。 ...
  • 作為一款火山引擎推出的雲原生數據倉庫,ByteHouse基於開源ClickHouse構建,併在位元組跳動內外部場景的檢驗下,對OLAP引擎能力、性能、運維、架構進一步升級。除此之外,ByteHouse也在Serverless方向探索,基於cloud-native 雲原生的理念構建了全新一代的數據倉庫,... ...
  • 本章將介紹如何在 HarmonyOS 上進行實際項目開發。我們將從項目需求分析開始,逐步完成項目的設計、開發、測試和上線過程。 ...
  • 目錄準備界面:view控制項LayoutCreator事件監聽OnClickListener轉跳頁面IntentIntent傳遞數據Toast和AlertDialogGson使用OKhttp3的基本使用post方法get方法輕量級存儲SharedPreferenceListView基本使用1、Simp ...
  • 作為一名全棧工程師,在日常的工作中,可能更側重於後端開發,如:C#,Java,SQL ,Python等,對前端的知識則不太精通。在一些比較完善的公司或者項目中,一般會搭配前端工程師,UI工程師等,來彌補後端開發的一些前端經驗技能上的不足。但並非所有的項目都會有專職前端工程師,在一些小型項目或者初創公... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...