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