Skip to content

Commit

Permalink
feat(vue3-hooks): 添加loading.immediate
Browse files Browse the repository at this point in the history
添加loading.immediate,loadingThreshold改为loading.threshold

BREAKING CHANGE: loadingThreshold改为loading.threshold
  • Loading branch information
mengxinssfd committed May 7, 2023
1 parent a7d2793 commit 85796f9
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 12 deletions.
8 changes: 6 additions & 2 deletions packages/vue3-hooks/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,12 @@ export interface State<T extends FN, D, TD = Awaited<ReturnType<T>>['data']> {
}

export interface CommonOptions {
// 毫秒值;loading必须显示的时间
loadingThreshold?: number;
loading?: {
// 立即把loading设置为true
immediate?: boolean;
// 毫秒值;loading必须显示的时间
threshold?: number;
};
}

export interface AliasOptions<A> extends CommonOptions {
Expand Down
26 changes: 16 additions & 10 deletions packages/vue3-hooks/src/useRequest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -114,21 +114,27 @@ export function useRequest<
setInnerRequest<T extends (...args: unknown[]) => 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<Required<AllOptions>['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));
Expand All @@ -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);
});
};

Expand Down

0 comments on commit 85796f9

Please sign in to comment.