成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何在 React 中使用 Axios 庫

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

開發(fā) Web 應用程序中最重要的概念之一是數據獲取。 請求是應用程序功能的基礎,無論您是從內容 API 還是以產品數據形式從后端獲取數據,都必須以清晰、可擴展且非冗余的方式處理。今天給大家分享下如何在 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 中進行調用

安裝完成后,你可以在你的 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 進行檢索數據。但是,如果您在呈現頁面組件之前使用相同的配置對相同的 API 進行多次調用怎么辦?每次調用都傳遞使用的配置都是相同的,所以調整后的代碼如下?

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(它將在每個調用的 URL 的開頭,使您不必重復它)和請求頭。

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

進一步完善和優(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
    }
  }
}

接下來在組件中進行調用,示例代碼如下:

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()
}, [])

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

總結

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

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

2017-07-04 19:02:17

ReacRedux 項目

2021-05-31 17:37:26

ViteReactesbuild

2021-09-10 10:30:22

Java代碼

2009-01-19 09:14:31

.NETMySQLMySql驅動包

2022-05-17 08:25:10

TypeScript接口前端

2022-06-23 08:00:53

PythonDateTime模塊

2021-06-09 09:36:18

DjangoElasticSearLinux

2021-03-09 07:27:40

Kafka開源分布式

2015-08-27 09:46:09

swiftAFNetworkin

2024-01-18 08:37:33

socketasyncio線程

2011-08-10 09:31:41

Hibernateunion

2019-09-16 19:00:48

Linux變量

2014-07-02 09:47:06

SwiftCocoaPods

2020-11-30 11:55:07

Docker命令Linux

2020-04-09 10:18:51

Bash循環(huán)Linux

2024-09-06 11:34:15

RustAI語言

2025-03-21 09:58:59

Python數據類型安全

2015-11-26 10:57:56

DockerOpen vSwitc

2022-10-25 09:07:28

Linuxxargs命令

2018-05-16 10:32:06

Linux命令find
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产欧美一区二区三区免费 | 国产精品视频久久久 | 在线亚洲精品 | 色久五月 | 国产日韩精品视频 | 亚洲激情综合网 | 日韩成人| 综合久| 国产成人亚洲精品自产在线 | 国产精品视频一区二区三区四蜜臂 | 涩涩视频大全 | 国产一区二区欧美 | 懂色中文一区二区三区在线视频 | 色综合久久久 | 在线视频第一页 | 国产日韩欧美中文字幕 | 欧美在线小视频 | 久久爱综合 | 久久久青草婷婷精品综合日韩 | 一区二区免费在线视频 | 精品免费国产一区二区三区 | 午夜精品久久久久久久久久久久 | 欧美综合久久 | 九九热精品在线 | 一区二区三区日韩精品 | 免费一级片 | 成年人在线视频 | 中文字幕第一页在线 | 中文精品一区二区 | 日韩在线视频一区二区三区 | 亚洲一页 | 理论片免费在线观看 | chinese中国真实乱对白 | 亚洲综合一区二区三区 | 一级做a毛片 | 欧美一区二区三区 | 成人三级视频在线观看 | 九色视频网 | 久久精品视频网站 | 欧美国产日韩一区 | 国产999精品久久久 日本视频一区二区三区 |