diff --git a/packages/fiber/src/core/events.ts b/packages/fiber/src/core/events.ts index 2335d55bcb..7f567fc2f9 100644 --- a/packages/fiber/src/core/events.ts +++ b/packages/fiber/src/core/events.ts @@ -252,7 +252,7 @@ export function createEvents(store: UseBoundStore) { // If the interaction is captured, make all capturing targets part of the intersect. if ('pointerId' in event && state.internal.capturedMap.has(event.pointerId)) { for (let captureData of state.internal.capturedMap.get(event.pointerId)!.values()) { - intersections.push(captureData.intersection) + if (!duplicates.has(makeId(captureData.intersection))) intersections.push(captureData.intersection) } } return intersections diff --git a/packages/fiber/tests/core/events.test.tsx b/packages/fiber/tests/core/events.test.tsx index 793e30c51c..dcb9a88f57 100644 --- a/packages/fiber/tests/core/events.test.tsx +++ b/packages/fiber/tests/core/events.test.tsx @@ -366,6 +366,7 @@ describe('events', () => { expect(handlePointerLeave).not.toHaveBeenCalled(); await act(async () => canvas.dispatchEvent(moveIn)) + expect(handlePointerMove).toHaveBeenCalledTimes(3); const up = new PointerEvent('pointerup', { pointerId }) Object.defineProperty(up, 'offsetX', { get: () => 577 })