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

如何在 React 中使用 Axios 庫

開發(fā) 前端
Axios 是一個基于 Promise 的 HTTP 庫,可以用在 JavaScript 和 Node.js 使中。它可以發(fā)送 get、post、put、delete 等請求,并且支持請求攔截、響應攔截、超時設置、請求取消等功能。Axios 使用簡單,代碼簡潔,并且跨平臺兼容性較好。

開發(fā) Web 應用程序中最重要的概念之一是數(shù)據(jù)獲取。 請求是應用程序功能的基礎,無論您是從內(nèi)容 API 還是以產(chǎn)品數(shù)據(jù)形式從后端獲取數(shù)據(jù),都必須以清晰、可擴展且非冗余的方式處理。今天給大家分享下如何在 React 使用 Axios 庫,在分享使用前,我們先詳細的了解下什么是 Axios。

什么是 Axios?

Axios 是一個基于 promise 的 HTTP 庫,可以用在 JavaScript 和 Node.js 使中。它可以發(fā)送 get、post、put、delete 等請求,并且支持請求攔截、響應攔截、超時設置、請求取消等功能。Axios 使用簡單,代碼簡潔,并且跨平臺兼容性較好。

以下示例簡單的展示了在原生 JS 中,如何使用 Axios。

// 安裝 axios
npm install axios

// 引入 axios
import axios from 'axios'

// 發(fā)送 get 請求
axios.get('/user?ID=12345')
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

// 發(fā)送 post 請求
axios.post('/user', {
    firstName: 'Fred',
    lastName: 'Flintstone'
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

如何安裝 Axios?

使用前,您須先使用 yarn 或 npm 將其安裝到您的項目中,安裝方法如下:

yarn add axios @types/axios

or

npm install axios @types/axios

簡單的在 React 中進行調(diào)用

安裝完成后,你可以在你的 React 應用中輕松使用 axios

import axios from "axios"

type Product = {
  id: string
  name: string,
}

const [product, setProduct] = useState<Product | null>(null)

const getData = async (): Promise<void> => {
  const productData = await axios.get('https://sample.api/product', {
    headers: {
      'X-Custom-Header': '0123456789'
    }
  }).catch(error => {
    console.log(error?.response.data)
    return null
  })
  setProduct(productData?.data || null)
}

useEffect(() => {
  getData()
}, [])

多個請求的處理

在上面的示例中,axios 用于從具有自定義請求頭的 API 進行檢索數(shù)據(jù)。但是,如果您在呈現(xiàn)頁面組件之前使用相同的配置對相同的 API 進行多次調(diào)用怎么辦?每次調(diào)用都傳遞使用的配置都是相同的,所以調(diào)整后的代碼如下?

import axios from "axios"

type Product = {
  id: string
  name: string,
}

type Content = {
  title: string,
  body: string
}

const [product, setProduct] = useState<Product | null>(null)
const [content, setContent] = useState<Content | null>(null)

const getData = async (): Promise<void> => {
  const axiosInstance = axios.create({
    baseURL: 'https://sample.api',
    headers: {
      'X-Custom-Header': '0123456789'
    }
  })
  const productData = await axiosInstance
    .get('/product')
    .catch(error => {
      console.log(error?.response.data)
      return null
    })
 const contentData = await axiosInstance
  .get('/content').catch(error => {
    console.log(error?.response.data)
    return null
  })
  setProduct(productData?.data || null)
  setContent(contentData?.data || null)
}

useEffect(() => {
  getData()
}, [])

實例的主要目的是創(chuàng)建一個新的具有自定義配置的axios實例;在上面的例子中,配置的邏輯是 baseURL(它將在每個調(diào)用的 URL 的開頭,使您不必重復它)和請求頭。

上面的代碼現(xiàn)在更容易閱讀和縮放;唯一剩下的冗余操作是對每個調(diào)用進行錯誤檢查。

進一步完善和優(yōu)化代碼

將公共的邏輯抽取到一個自定義的 API 請求類中,新建文件 src/utils/api.ts ,示例代碼如下:

import axios, { AxiosRequestConfig } from "axios"

export const api = (config: AxiosRequestConfig) => {
  const instance = axios.create(config)
  return {
    get: async (url: string) => {
      const result = await instance.get<{ data: any }>(url).catch((error: any) => {
        console.log(error?.response?.data)
        return null
      })
      return result
    }
  }
}

接下來在組件中進行調(diào)用,示例代碼如下:

import { api } from "./utils/api"

type Product = {
  id: string
  name: string,
}

type Content = {
  title: string,
  body: string
}

const [product, setProduct] = useState<Product | null>(null)
const [content, setContent] = useState<Content | null>(null)

const getData = async (): Promise<void> => {
  const instance = api({
    baseURL: 'https://sample.api',
    headers: {
      'X-Custom-Header': '0123456789'
    }
  })
  const productData = await instance.get('/product')
  const contentData = await instance.get('/content')
  setProduct(productData?.data || null)
  setContent(contentData?.data || null)
}

useEffect(() => {
  getData()
}, [])

現(xiàn)在多余的錯誤捕獲也消失了 ,代碼是不是干凈許多。

總結(jié)

今天的分享就到這里,你覺得這個實現(xiàn)怎么樣?這對你有幫助嗎?請在評論區(qū)分享您的想法。

責任編輯:姜華 來源: 今日頭條
相關推薦

2021-05-31 17:37:26

ViteReactesbuild

2017-07-04 19:02:17

ReacRedux 項目

2021-09-10 10:30:22

Java代碼

2009-01-19 09:14:31

.NETMySQLMySql驅(qū)動包

2011-08-10 09:31:41

Hibernateunion

2021-03-09 07:27:40

Kafka開源分布式

2015-08-27 09:46:09

swiftAFNetworkin

2021-06-09 09:36:18

DjangoElasticSearLinux

2022-05-17 08:25:10

TypeScript接口前端

2022-06-23 08:00:53

PythonDateTime模塊

2024-01-18 08:37:33

socketasyncio線程

2019-09-16 19:00:48

Linux變量

2014-07-02 09:47:06

SwiftCocoaPods

2020-04-09 10:18:51

Bash循環(huán)Linux

2024-09-06 11:34:15

RustAI語言

2020-11-30 11:55:07

Docker命令Linux

2025-03-21 09:58:59

Python數(shù)據(jù)類型安全

2022-10-25 09:07:28

Linuxxargs命令

2015-11-26 10:57:56

DockerOpen vSwitc

2023-01-28 17:41:07

Java代碼
點贊
收藏

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