From 6d119eb582a41d8ff517db7927d251023387b430 Mon Sep 17 00:00:00 2001 From: Veniamin Krol <153412+vkrol@users.noreply.github.com> Date: Mon, 26 Jan 2026 10:33:49 +0100 Subject: [PATCH 1/3] Optimize zooming when panOnScroll is enabled Do not update the store every time the wheel event is triggered if nothing has changed. --- packages/react/src/container/ZoomPane/index.tsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/react/src/container/ZoomPane/index.tsx b/packages/react/src/container/ZoomPane/index.tsx index 67babfa2..bf662e68 100644 --- a/packages/react/src/container/ZoomPane/index.tsx +++ b/packages/react/src/container/ZoomPane/index.tsx @@ -73,7 +73,13 @@ export function ZoomPane({ maxZoom, translateExtent, viewport: defaultViewport, - onDraggingChange: (paneDragging: boolean) => store.setState({ paneDragging }), + onDraggingChange: (paneDragging) => + store.setState((prevState) => { + if (prevState.paneDragging !== paneDragging) { + return { paneDragging }; + } + return prevState; + }), onPanZoomStart: (event, vp) => { const { onViewportChangeStart, onMoveStart } = store.getState(); onMoveStart?.(event, vp); From 2624479ad3d0b06fcb690242b2372ff2a7e16f54 Mon Sep 17 00:00:00 2001 From: Veniamin Krol <153412+vkrol@users.noreply.github.com> Date: Mon, 26 Jan 2026 10:46:02 +0100 Subject: [PATCH 2/3] Add changeset file --- .changeset/empty-paws-cough.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/empty-paws-cough.md diff --git a/.changeset/empty-paws-cough.md b/.changeset/empty-paws-cough.md new file mode 100644 index 00000000..6642232e --- /dev/null +++ b/.changeset/empty-paws-cough.md @@ -0,0 +1,5 @@ +--- +'@xyflow/react': patch +--- + +Optimize zooming performance when panOnScroll mode is enabled From c029cd1a2845eec2433e0b9b3cdd38be813d2bb7 Mon Sep 17 00:00:00 2001 From: Moritz Klack Date: Tue, 27 Jan 2026 11:17:16 +0100 Subject: [PATCH 3/3] Simplify paneDragging state update logic --- packages/react/src/container/ZoomPane/index.tsx | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/packages/react/src/container/ZoomPane/index.tsx b/packages/react/src/container/ZoomPane/index.tsx index bf662e68..14d64957 100644 --- a/packages/react/src/container/ZoomPane/index.tsx +++ b/packages/react/src/container/ZoomPane/index.tsx @@ -74,12 +74,7 @@ export function ZoomPane({ translateExtent, viewport: defaultViewport, onDraggingChange: (paneDragging) => - store.setState((prevState) => { - if (prevState.paneDragging !== paneDragging) { - return { paneDragging }; - } - return prevState; - }), + store.setState((prevState) => prevState.paneDragging === paneDragging ? prevState : { paneDragging }), onPanZoomStart: (event, vp) => { const { onViewportChangeStart, onMoveStart } = store.getState(); onMoveStart?.(event, vp);