From 92630dda967d19507f70a943e42889e3a4163949 Mon Sep 17 00:00:00 2001 From: azaleta <24407500@qq.com> Date: Fri, 2 Sep 2022 12:38:33 +0800 Subject: [PATCH] feat(useAxios): support RequestConfig for `execute` (#2152) --- packages/integrations/useAxios/index.md | 9 +++++++ packages/integrations/useAxios/index.test.ts | 25 ++++++++++++++++++++ packages/integrations/useAxios/index.ts | 4 ++-- 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/packages/integrations/useAxios/index.md b/packages/integrations/useAxios/index.md index a31665f5b95..9f57e43e474 100644 --- a/packages/integrations/useAxios/index.md +++ b/packages/integrations/useAxios/index.md @@ -62,6 +62,15 @@ const { execute } = useAxios(url1, {}, { immediate: false }) execute(url2) ``` +The `execute` function can accept `config` only. +```ts +import { useAxios } from '@vueuse/integrations/useAxios' + +const { execute } = useAxios(url1, { method: 'GET' }, { immediate: false }) +execute({ params: { key: 1 } }) +execute({ params: { key: 2 } }) +``` + The `execute` function resolves with a result of network request. ```ts import { useAxios } from '@vueuse/integrations/useAxios' diff --git a/packages/integrations/useAxios/index.test.ts b/packages/integrations/useAxios/index.test.ts index 46749623873..9054f6d69a8 100644 --- a/packages/integrations/useAxios/index.test.ts +++ b/packages/integrations/useAxios/index.test.ts @@ -185,4 +185,29 @@ describe('useAxios', () => { expect(onRejected).toBeCalledTimes(0) }, onRejected) }) + + test('calling axios with config change(param/data etc.) only', async () => { + const { isLoading, then, execute } = useAxios('/comments', config, instance, options) + expect(isLoading.value).toBeFalsy() + const paramConfig: AxiosRequestConfig = { params: { postId: 1 } } + execute(paramConfig) + expect(isLoading.value).toBeTruthy() + const onRejected = vitest.fn() + + await then((result) => { + expect(result.data.value[0].postId).toBe(1) + expect(isLoading.value).toBeFalsy() + expect(onRejected).toBeCalledTimes(0) + }, onRejected) + + paramConfig.params = { postId: 2 } + execute(paramConfig) + expect(isLoading.value).toBeTruthy() + + await then((result) => { + expect(result.data.value[0].postId).toBe(2) + expect(isLoading.value).toBeFalsy() + expect(onRejected).toBeCalledTimes(0) + }, onRejected) + }) }) diff --git a/packages/integrations/useAxios/index.ts b/packages/integrations/useAxios/index.ts index 683709074b5..0115b8a63ce 100644 --- a/packages/integrations/useAxios/index.ts +++ b/packages/integrations/useAxios/index.ts @@ -78,7 +78,7 @@ export interface StrictUseAxiosReturn extends UseAxiosReturn { /** * Manually call the axios request */ - execute: (url?: string, config?: AxiosRequestConfig) => PromiseLike> + execute: (url?: string | AxiosRequestConfig, config?: AxiosRequestConfig) => PromiseLike> } export interface EasyUseAxiosReturn extends UseAxiosReturn { /** @@ -174,7 +174,7 @@ export function useAxios(...args: any[]): OverallUseAxiosReturn & Pr ? executeUrl : url ?? '' loading(true) - instance(_url, { ...defaultConfig, ...config, cancelToken: cancelToken.token }) + instance(_url, { ...defaultConfig, ...typeof executeUrl === 'object' ? executeUrl : config, cancelToken: cancelToken.token }) .then((r: any) => { response.value = r data.value = r.data