diff --git a/package.json b/package.json index 9f2d61990e..098fe04021 100755 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "clean-dist": "rimraf 'packages/*/{lib,es,node_modules,dist}'", "clean": "pnpm run clean-dist && rimraf node_modules", "build": "pnpm -r --filter=./packages/* run build", - "test": "jest", + "test": "jest useLoadingDelayPlugin", "coveralls": "jest --coverage --coverageReporters=text-lcov | coveralls", "lint": "eslint --ignore-pattern **/__tests__/* --ignore-pattern **/demo/* \"packages/*/src/**/*.{ts,tsx}\" --cache", "pretty": "biome format --fix --staged", 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();