@vruse/axios
TypeScript icon, indicating that this package has built-in type declarations

1.1.25 • Public • Published

useAxios

Axios 的封装,既可以不带 await 使用,也可以带 await 使用

如果使用 const { data } = useAxios('url') 则 data 为一个 vue 响应式变量,初始值为 undefined,等待请求完成后自动变成请求结果,适用于非异步函数情景。

如果使用 const { data } = await useAxios('url') 则 data 直接为请求结果。

使用方式

不带 await

<script setup lang=ts>
import { useAxios } from '@vruse/axios'

const { data, loading } = useAxios('https://wwww.demo.com/api')
</script>

<template>
  <div v-if="loading">
    loading...
  </div>
  <pre v-else>
    {{ data }}
  </pre>
</template>

异步模式使用

<script setup lang=ts>
import { useAxios } from '@vruse/axios'
const res = ref()
const loading = ref(true)

async function run() {
  const { data } = await useAxios('https://wwww.demo.com/api')
  res.value = data.value
  loading.value = false
}
run()
</script>

<template>
  <div v-if="loading">
    loading...
  </div>
  <pre v-else>
    {{ data }}
  </pre>
</template>

使用外部自定义数据控制源

如果您觉得 useAxios 返回的 data 和 loading 还需要再次赋值给自己的源数据,比较繁琐,那么你可以提前准备好数据源,在请求时传入,我们可以将上一个示例修改为:

<script setup lang=ts>
import { useAxios } from '@vruse/axios'
const res = ref()
const loading = ref(true)

async function run() {
  await useAxios('https://wwww.demo.com/api', {
    controller: {
      data: res,
      loading
    }
  })
}
run()
</script>

<template>
  <div v-if="loading">
    loading...
  </div>
  <pre v-else>
    {{ data }}
  </pre>
</template>

取消请求

<script setup lang=ts>
import { useAxios } from '@vruse/axios'

const { data, loading, adbort } = useAxios('https://wwww.demo.com/api')
// 1000 后若还没有请求成功就取消
setTimeOut(adbort, 1000)
</script>

<template>
  <div v-if="loading">
    loading...
  </div>
  <pre v-else>
    {{ data }}
  </pre>
</template>

自定义 axios 实例

import { useAxiosCreate } from '@vruse/axios'

// 可接受 axios 的配置对象
// 参考 https://axios-http.com/docs/req_config
useAxiosCreate({
  baseUrl: 'https://demo.com'
})
// 后续的 useAxios 都会使用这个实例

维护多个实例

useAxios 默认使用最后一次创建的实例,如果您有维护多个 Axios 实例的需求,那么你可以多次调用 useAxiosCreate(),然后在调用 useAxios 时手动声明使用哪一个实例:

import { useAxiosCreate } from '@vruse/axios'

// 可接受 axios 的配置对象
// 参考 https://axios-http.com/docs/req_config
const instance1 = useAxiosCreate({
  baseUrl: 'https://demo.com'
})

const instance2 = useAxiosCreate({
  baseUrl: 'https://demo2.com'
})

// 后续的 useAxios 默认会使用最后一次创建的实例
// 手动声明使用 instance1
useAxios('/api', {
  controller: {
    instance: instance1
  }
})

获取 axios 实例

import { useAxiosInstance } from '@vruse/axios'
const instance = useAxiosInstance()
// Alter defaults after instance has been created
instance.defaults.headers.common.Authorization = AUTH_TOKEN

修改 axios 配置

获取实例后修改即可

import { useAxiosInstance } from '@vruse/axios'
const instance = useAxiosInstance()
// Alter defaults after instance has been created
instance.defaults.headers.common.Authorization = AUTH_TOKEN

请求拦截,相应拦截

获取实例后修改即可 参考:Axios 文档

import { useAxiosInstance } from '@vruse/axios'
const instance = useAxiosInstance()
// 请求拦截
instance.interceptors.request.use(() => { /* ...*/ })
// 相应拦截
instance.interceptors.response.use(() => { /* ...*/ })

Readme

Keywords

Package Sidebar

Install

npm i @vruse/axios

Weekly Downloads

2

Version

1.1.25

License

MIT

Unpacked Size

8.58 kB

Total Files

4

Last publish

Collaborators

  • dongwa
  • codemanl