From 85796f966bdf7077dcec2231b00fbe2b4635fc67 Mon Sep 17 00:00:00 2001 From: dyh_a Date: Sun, 7 May 2023 14:32:15 +0800 Subject: [PATCH] =?UTF-8?q?feat(vue3-hooks):=20=E6=B7=BB=E5=8A=A0loading.i?= =?UTF-8?q?mmediate?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加loading.immediate,loadingThreshold改为loading.threshold BREAKING CHANGE: loadingThreshold改为loading.threshold --- packages/vue3-hooks/src/types.ts | 8 ++++++-- packages/vue3-hooks/src/useRequest.ts | 26 ++++++++++++++++---------- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/packages/vue3-hooks/src/types.ts b/packages/vue3-hooks/src/types.ts index 4f74d93..3ba2209 100644 --- a/packages/vue3-hooks/src/types.ts +++ b/packages/vue3-hooks/src/types.ts @@ -13,8 +13,12 @@ export interface State>['data']> { } export interface CommonOptions { - // 毫秒值;loading必须显示的时间 - loadingThreshold?: number; + loading?: { + // 立即把loading设置为true + immediate?: boolean; + // 毫秒值;loading必须显示的时间 + threshold?: number; + }; } export interface AliasOptions extends CommonOptions { diff --git a/packages/vue3-hooks/src/useRequest.ts b/packages/vue3-hooks/src/useRequest.ts index 5ffc5ae..9dcbe0b 100644 --- a/packages/vue3-hooks/src/useRequest.ts +++ b/packages/vue3-hooks/src/useRequest.ts @@ -114,21 +114,27 @@ export function useRequest< setInnerRequest void>(cb: (req: T) => T): void; }; export function useRequest(requestFn: FN, options = {}, defaultData = null) { + const { + requestAlias = 'request', + immediate = false, + data, + loading: _loadingOptions = {}, + } = options as AllOptions; + + const loadingOptions: Required['loading']> = { + threshold: 0, + immediate: false, + ..._loadingOptions, + }; + const state = reactive({ - loading: false, + loading: loadingOptions.immediate, data: defaultData, error: null, }); const refs = toRefs(state); - const { - requestAlias = 'request', - immediate = false, - data, - loadingThreshold = 0, - } = options as AllOptions; - let request = (...args: unknown[]) => { // computed变量不能JSON.stringfy args = args.map((item) => (isRef(item) ? item.value : item)); @@ -145,8 +151,8 @@ export function useRequest(requestFn: FN, options = {}, defaultData = null) { ) .finally(() => { const timeDiff = Date.now() - start; - if (timeDiff > loadingThreshold) state.loading = false; - else setTimeout(() => (state.loading = false), loadingThreshold - timeDiff); + if (timeDiff > loadingOptions.threshold) state.loading = false; + else setTimeout(() => (state.loading = false), loadingOptions.threshold - timeDiff); }); };