From dac66b25aa1c8bd5ac901201f120ae97dd4c5c84 Mon Sep 17 00:00:00 2001 From: guaijie <30885718+guaijie@users.noreply.github.com> Date: Mon, 20 Jan 2025 02:27:45 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E9=87=8D=E7=BD=AE=20l?= =?UTF-8?q?oadingDelay=20=E4=B8=BA=20undefined=20=E5=90=8E=EF=BC=8C?= =?UTF-8?q?=E5=AE=9A=E6=97=B6=E5=99=A8=E6=B2=A1=E6=9C=89=E8=A2=AB=E6=B8=85?= =?UTF-8?q?=E7=90=86=E8=80=8C=E5=AF=BC=E8=87=B4=20loading=20=E5=A7=8B?= =?UTF-8?q?=E7=BB=88=E4=B8=BA=20true=20=E7=9A=84=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../__tests__/useLoadingDelayPlugin.test.ts | 28 ++++++++++++++++++- .../src/plugins/useLoadingDelayPlugin.ts | 9 +++--- 2 files changed, 32 insertions(+), 5 deletions(-) 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();