diff --git a/packages/hooks/src/useRequest/__tests__/useLoadingDelayPlugin.test.ts b/packages/hooks/src/useRequest/__tests__/useLoadingDelayPlugin.test.ts index cd58c81e25..2ca1bcb126 100644 --- a/packages/hooks/src/useRequest/__tests__/useLoadingDelayPlugin.test.ts +++ b/packages/hooks/src/useRequest/__tests__/useLoadingDelayPlugin.test.ts @@ -1,7 +1,7 @@ import { act, renderHook, waitFor } from '@testing-library/react'; import type { RenderHookResult } from '@testing-library/react'; import useRequest from '../index'; -import { request } from '../../utils/testingHelpers'; +import { request, sleep } from '../../utils/testingHelpers'; describe('useLoadingDelayPlugin', () => { jest.useFakeTimers(); @@ -75,4 +75,30 @@ describe('useLoadingDelayPlugin', () => { await waitFor(() => expect(hook.result.current.loading).toBe(true)); }); + + it.only('useLoadingDelayPlugin should update loading when loadingDelay is reset and refreshDeps is changed', async () => { + jest.useRealTimers(); + + let loadingDelay: number | null = 1500; + + act(() => { + hook = setUp(request, { + loadingDelay, + }); + }); + + expect(hook.result.current.loading).toBe(false); + + loadingDelay = null; + + hook.rerender({ + loadingDelay, + }); + + await act(async () => { + await sleep(1600); + }); + + expect(hook.result.current.loading).toBe(false); + }); }); diff --git a/packages/hooks/src/useRequest/src/plugins/useLoadingDelayPlugin.ts b/packages/hooks/src/useRequest/src/plugins/useLoadingDelayPlugin.ts index 74e4fb6f14..a6734b910d 100644 --- a/packages/hooks/src/useRequest/src/plugins/useLoadingDelayPlugin.ts +++ b/packages/hooks/src/useRequest/src/plugins/useLoadingDelayPlugin.ts @@ -4,16 +4,17 @@ import type { Plugin, Timeout } from '../types'; const useLoadingDelayPlugin: Plugin = (fetchInstance, { loadingDelay, ready }) => { const timerRef = useRef(); - if (!loadingDelay) { - return {}; - } - const cancelTimeout = () => { if (timerRef.current) { clearTimeout(timerRef.current); } }; + if (!loadingDelay) { + cancelTimeout(); + return {}; + } + return { onBefore: () => { cancelTimeout();