fix(useReactFlow): prevent unnecessary re-renderings

This commit is contained in:
moklick
2022-08-16 12:44:47 +02:00
parent 196f225aac
commit bb00e871c0
6 changed files with 22 additions and 21 deletions
+1 -1
View File
@@ -27,7 +27,7 @@
},
"..": {
"name": "react-flow-renderer",
"version": "10.3.13",
"version": "10.3.14",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.18.9",
+1 -1
View File
@@ -117,7 +117,7 @@ const CustomNodeFlow = () => {
connectionLineStyle={connectionLineStyle}
snapToGrid={true}
snapGrid={snapGrid}
defaultZoom={0.3}
fitView
minZoom={0.3}
maxZoom={2}
>
+1 -1
View File
@@ -86,7 +86,7 @@ const UseZoomPanHelperFlow = () => {
const logNodes = useCallback(() => {
console.log('nodes', getNodes());
console.log('edges', getEdges());
}, [getNodes]);
}, [getNodes, getEdges]);
useEffect(() => {
addEdges({ id: 'e3-4', source: '3', target: '4' });
+16 -15
View File
@@ -1,4 +1,4 @@
import { useCallback } from 'react';
import { useCallback, useMemo } from 'react';
import useViewportHelper from './useViewportHelper';
import { useStoreApi } from '../store';
@@ -14,7 +14,7 @@ import {
} from '../types';
export default function useReactFlow<NodeData = any, EdgeData = any>(): ReactFlowInstance<NodeData, EdgeData> {
const { initialized: viewportInitialized, ...viewportHelperFunctions } = useViewportHelper();
const viewportHelper = useViewportHelper();
const store = useStoreApi();
const getNodes = useCallback<Instance.GetNodes<NodeData>>(() => {
@@ -110,17 +110,18 @@ export default function useReactFlow<NodeData = any, EdgeData = any>(): ReactFlo
};
}, []);
return {
...viewportHelperFunctions,
viewportInitialized,
getNodes,
getNode,
getEdges,
getEdge,
setNodes,
setEdges,
addNodes,
addEdges,
toObject,
};
return useMemo(() => {
return {
...viewportHelper,
getNodes,
getNode,
getEdges,
getEdge,
setNodes,
setEdges,
addNodes,
addEdges,
toObject,
};
}, [viewportHelper, getNodes, getNode, getEdges, getEdge, setNodes, setEdges, addNodes, addEdges, toObject]);
}
+2 -2
View File
@@ -20,7 +20,7 @@ const initialViewportHelper: ViewportHelperFunctions = {
setCenter: (_: number, __: number) => {},
fitBounds: (_: Rect) => {},
project: (position: XYPosition) => position,
initialized: false,
viewportInitialized: false,
};
const selector = (s: ReactFlowState) => ({
@@ -71,7 +71,7 @@ const useViewportHelper = (): ViewportHelperFunctions => {
const { transform, snapToGrid, snapGrid } = store.getState();
return pointToRendererPoint(position, transform, snapToGrid, snapGrid);
},
initialized: true,
viewportInitialized: true,
};
}
+1 -1
View File
@@ -130,7 +130,7 @@ export interface ViewportHelperFunctions {
setCenter: SetCenter;
fitBounds: FitBounds;
project: Project;
initialized: boolean;
viewportInitialized: boolean;
}
export type ReactFlowStore = {