@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'@xyflow/react': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Improve performance of adding nodes & edges
|
||||||
@@ -239,6 +239,16 @@ const StressFlow = () => {
|
|||||||
<button onClick={remount}>re-mount</button>
|
<button onClick={remount}>re-mount</button>
|
||||||
<button onClick={updatePos}>change pos</button>
|
<button onClick={updatePos}>change pos</button>
|
||||||
<button onClick={updateElements}>update elements</button>
|
<button onClick={updateElements}>update elements</button>
|
||||||
|
<button
|
||||||
|
onClick={() => {
|
||||||
|
setNodes((nds) => [
|
||||||
|
...nds,
|
||||||
|
{ id: (nds.length + 1).toString(), position: { x: 0, y: 0 }, data: { label: `Node ${nds.length + 1}` } },
|
||||||
|
]);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
Add element
|
||||||
|
</button>
|
||||||
</Panel>
|
</Panel>
|
||||||
</ReactFlow>
|
</ReactFlow>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { useState, useMemo, useRef, type KeyboardEvent, useCallback, JSX } from 'react';
|
import { useState, useMemo, useRef, type KeyboardEvent, useCallback, JSX, memo } from 'react';
|
||||||
import cc from 'classcat';
|
import cc from 'classcat';
|
||||||
import { shallow } from 'zustand/shallow';
|
import { shallow } from 'zustand/shallow';
|
||||||
import {
|
import {
|
||||||
@@ -15,7 +15,7 @@ import { builtinEdgeTypes, nullPosition } from './utils';
|
|||||||
import { EdgeUpdateAnchors } from './EdgeUpdateAnchors';
|
import { EdgeUpdateAnchors } from './EdgeUpdateAnchors';
|
||||||
import type { Edge, EdgeWrapperProps } from '../../types';
|
import type { Edge, EdgeWrapperProps } from '../../types';
|
||||||
|
|
||||||
export function EdgeWrapper<EdgeType extends Edge = Edge>({
|
function EdgeWrapper<EdgeType extends Edge = Edge>({
|
||||||
id,
|
id,
|
||||||
edgesFocusable,
|
edgesFocusable,
|
||||||
edgesReconnectable,
|
edgesReconnectable,
|
||||||
@@ -263,3 +263,5 @@ export function EdgeWrapper<EdgeType extends Edge = Edge>({
|
|||||||
</svg>
|
</svg>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export default memo(EdgeWrapper) as typeof EdgeWrapper;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { type MouseEvent, type KeyboardEvent } from 'react';
|
import { type MouseEvent, type KeyboardEvent, memo } from 'react';
|
||||||
import cc from 'classcat';
|
import cc from 'classcat';
|
||||||
import { shallow } from 'zustand/shallow';
|
import { shallow } from 'zustand/shallow';
|
||||||
import {
|
import {
|
||||||
@@ -20,7 +20,7 @@ import { arrowKeyDiffs, builtinNodeTypes, getNodeInlineStyleDimensions } from '.
|
|||||||
import { useNodeObserver } from './useNodeObserver';
|
import { useNodeObserver } from './useNodeObserver';
|
||||||
import type { InternalNode, Node, NodeWrapperProps } from '../../types';
|
import type { InternalNode, Node, NodeWrapperProps } from '../../types';
|
||||||
|
|
||||||
export function NodeWrapper<NodeType extends Node>({
|
function NodeWrapper<NodeType extends Node>({
|
||||||
id,
|
id,
|
||||||
onClick,
|
onClick,
|
||||||
onMouseEnter,
|
onMouseEnter,
|
||||||
@@ -249,3 +249,5 @@ export function NodeWrapper<NodeType extends Node>({
|
|||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export default memo(NodeWrapper) as typeof NodeWrapper;
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { useStore } from '../../hooks/useStore';
|
|||||||
import { useVisibleEdgeIds } from '../../hooks/useVisibleEdgeIds';
|
import { useVisibleEdgeIds } from '../../hooks/useVisibleEdgeIds';
|
||||||
import MarkerDefinitions from './MarkerDefinitions';
|
import MarkerDefinitions from './MarkerDefinitions';
|
||||||
import { GraphViewProps } from '../GraphView';
|
import { GraphViewProps } from '../GraphView';
|
||||||
import { EdgeWrapper } from '../../components/EdgeWrapper';
|
import EdgeWrapper from '../../components/EdgeWrapper';
|
||||||
import type { Edge, ReactFlowState, Node } from '../../types';
|
import type { Edge, ReactFlowState, Node } from '../../types';
|
||||||
|
|
||||||
type EdgeRendererProps<EdgeType extends Edge = Edge> = Pick<
|
type EdgeRendererProps<EdgeType extends Edge = Edge> = Pick<
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import { useStore } from '../../hooks/useStore';
|
|||||||
import { containerStyle } from '../../styles/utils';
|
import { containerStyle } from '../../styles/utils';
|
||||||
import { GraphViewProps } from '../GraphView';
|
import { GraphViewProps } from '../GraphView';
|
||||||
import { useResizeObserver } from './useResizeObserver';
|
import { useResizeObserver } from './useResizeObserver';
|
||||||
import { NodeWrapper } from '../../components/NodeWrapper';
|
import NodeWrapper from '../../components/NodeWrapper';
|
||||||
import type { Node, ReactFlowState } from '../../types';
|
import type { Node, ReactFlowState } from '../../types';
|
||||||
|
|
||||||
export type NodeRendererProps<NodeType extends Node> = Pick<
|
export type NodeRendererProps<NodeType extends Node> = Pick<
|
||||||
|
|||||||
Reference in New Issue
Block a user