@@ -22,8 +22,8 @@ import type {
2222import type {
2323 PortContextValue ,
2424} from '@/components/flow/nodes/ChaingraphNode/ports/context/PortContext'
25- import { memo } from 'react'
2625import { AnyPort } from 'components/flow/nodes/ChaingraphNode/ports/AnyPort/AnyPort'
26+ import { memo } from 'react'
2727import { BooleanPort } from '@/components/flow/nodes/ChaingraphNode/ports/BooleanPort/BooleanPort'
2828import { NumberPort } from '@/components/flow/nodes/ChaingraphNode/ports/NumberPort/NumberPort'
2929
@@ -46,6 +46,35 @@ export interface PortProps {
4646 context : PortContextValue
4747}
4848
49+ /**
50+ * Memoized PortComponent with custom comparison
51+ * Only re-renders when port data actually changes, not on parent node position updates
52+ */
53+ export const PortComponent = memo ( PortComponentInner , ( prev , next ) => {
54+ // Different port ID = must re-render
55+ if ( prev . port . id !== next . port . id ) {
56+ return false
57+ }
58+
59+ // Different node = must re-render
60+ if ( prev . node . id !== next . node . id ) {
61+ return false
62+ }
63+
64+ // Node version changed = port data might have changed
65+ if ( prev . node . getVersion ( ) !== next . node . getVersion ( ) ) {
66+ return false
67+ }
68+
69+ // Context reference changed (operations are stable, but check anyway)
70+ if ( prev . context !== next . context ) {
71+ return false
72+ }
73+
74+ // All checks passed - skip re-render
75+ return true
76+ } )
77+
4978function PortComponentInner ( props : PortProps ) {
5079 const {
5180 node,
@@ -118,32 +147,3 @@ function PortComponentInner(props: PortProps) {
118147 }
119148 }
120149}
121-
122- /**
123- * Memoized PortComponent with custom comparison
124- * Only re-renders when port data actually changes, not on parent node position updates
125- */
126- export const PortComponent = memo ( PortComponentInner , ( prev , next ) => {
127- // Different port ID = must re-render
128- if ( prev . port . id !== next . port . id ) {
129- return false
130- }
131-
132- // Different node = must re-render
133- if ( prev . node . id !== next . node . id ) {
134- return false
135- }
136-
137- // Node version changed = port data might have changed
138- if ( prev . node . getVersion ( ) !== next . node . getVersion ( ) ) {
139- return false
140- }
141-
142- // Context reference changed (operations are stable, but check anyway)
143- if ( prev . context !== next . context ) {
144- return false
145- }
146-
147- // All checks passed - skip re-render
148- return true
149- } )
0 commit comments