From 04188f54aafb0e4e5e8355f3a52f980982cb4059 Mon Sep 17 00:00:00 2001 From: aojunhao123 <1844749591@qq.com> Date: Tue, 23 Dec 2025 11:39:59 +0800 Subject: [PATCH 1/2] fix: reset stack when unmount --- src/useEscKeyDown.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/useEscKeyDown.ts b/src/useEscKeyDown.ts index 79c022e..4a963c6 100644 --- a/src/useEscKeyDown.ts +++ b/src/useEscKeyDown.ts @@ -31,6 +31,7 @@ export default function useEscKeyDown(open: boolean, onEsc?: EscCallback) { window.addEventListener('keydown', handleEscKeyDown); return () => { + stack = stack.filter(item => item !== id); window.removeEventListener('keydown', handleEscKeyDown); }; }, [open, id]); From 405ef22751fd8668c3c08e6f68c14694bbc6ab18 Mon Sep 17 00:00:00 2001 From: aojunhao123 <1844749591@qq.com> Date: Tue, 23 Dec 2025 11:49:58 +0800 Subject: [PATCH 2/2] add test --- src/useEscKeyDown.ts | 2 +- tests/index.test.tsx | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/useEscKeyDown.ts b/src/useEscKeyDown.ts index 4a963c6..0044231 100644 --- a/src/useEscKeyDown.ts +++ b/src/useEscKeyDown.ts @@ -3,7 +3,7 @@ import { type EscCallback } from './Portal'; import useId from '@rc-component/util/lib/hooks/useId'; import { useEvent } from '@rc-component/util'; -let stack: string[] = []; +export let stack: string[] = []; // export for testing export default function useEscKeyDown(open: boolean, onEsc?: EscCallback) { const id = useId(); diff --git a/tests/index.test.tsx b/tests/index.test.tsx index 72fa6a1..40b5eba 100644 --- a/tests/index.test.tsx +++ b/tests/index.test.tsx @@ -1,6 +1,7 @@ import { render, fireEvent } from '@testing-library/react'; import React from 'react'; import Portal from '../src'; +import { stack } from '../src/useEscKeyDown'; global.isOverflow = true; @@ -355,5 +356,17 @@ describe('Portal', () => { ); expect(onEscB).not.toHaveBeenCalled(); }); + + it('should clear stack when unmount', () => { + const { unmount } = render( + +
+ , + ); + + expect(stack).toHaveLength(1); + unmount(); + expect(stack).toHaveLength(0); + }); }); });