From 67e931ef962bd19bdbe44c4459a6ed3ac0df58be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E8=89=B3=E5=85=B5?= Date: Tue, 30 Dec 2025 09:58:19 +0800 Subject: [PATCH] fix(trigger): avoid render-based reset for interaction-level deduplication --- src/index.tsx | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/index.tsx b/src/index.tsx index 789831d4..8bc17890 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -372,9 +372,18 @@ export function generateTrigger( openRef.current = mergedOpen; const lastTriggerRef = React.useRef([]); - lastTriggerRef.current = []; + const resetScheduledRef = React.useRef(false); const internalTriggerOpen = useEvent((nextOpen: boolean) => { + // `lastTriggerRef` is for interaction-level deduplication; do not reset it on render. + if (!resetScheduledRef.current) { + resetScheduledRef.current = true; + queueMicrotask(() => { + resetScheduledRef.current = false; + lastTriggerRef.current = []; + }); + } + setInternalOpen(nextOpen); // Enter or Pointer will both trigger open state change