perf(know-your-world): memoize state machine return value and remove debug logging
- Memoize useInteractionStateMachine return object to prevent unnecessary re-renders in consumers that depend on interactionMachine - Remove debug logging effect that fired on every state change These changes reduce the number of callback recreations and console output, which could affect performance. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
d0a877ee8e
commit
d85b976f8b
|
|
@ -514,33 +514,7 @@ export function MapRenderer({
|
|||
// - handleLockReleased callback dispatches RELEASE_ANIMATION_DONE
|
||||
// ==========================================================================
|
||||
|
||||
// Debug: Log state machine state changes and verify sync (only in dev)
|
||||
useEffect(() => {
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
// Compare state machine derived values with existing boolean state
|
||||
const machineShowMagnifier = interactionMachine.showMagnifier
|
||||
const machineIsPrecision = interactionMachine.isPrecisionMode
|
||||
const machineIsReleasingPrecision = interactionMachine.isReleasingPrecision
|
||||
|
||||
// Log state transitions with comparison
|
||||
console.log('[StateMachine]', {
|
||||
state: interactionMachine.state,
|
||||
machine: { showMagnifier: machineShowMagnifier, isPrecision: machineIsPrecision },
|
||||
boolean: { showMagnifier, pointerLocked, isReleasingPointerLock },
|
||||
})
|
||||
|
||||
// Warn on sync divergence (helps identify missing sync effects)
|
||||
// Note: Divergence is expected during transitions due to effect timing
|
||||
}
|
||||
}, [
|
||||
interactionMachine.state,
|
||||
interactionMachine.showMagnifier,
|
||||
interactionMachine.isPrecisionMode,
|
||||
interactionMachine.isReleasingPrecision,
|
||||
showMagnifier,
|
||||
pointerLocked,
|
||||
isReleasingPointerLock,
|
||||
])
|
||||
// Note: Debug logging for state machine sync removed after migration verified working
|
||||
|
||||
// Give up reveal animation state
|
||||
const [giveUpFlashProgress, setGiveUpFlashProgress] = useState(0) // 0-1 pulsing value
|
||||
|
|
|
|||
|
|
@ -719,31 +719,56 @@ export function useInteractionStateMachine(): UseInteractionStateMachineReturn {
|
|||
[isMagnifierPanning, isMagnifierPinching, isMapPanningMobile]
|
||||
)
|
||||
|
||||
return {
|
||||
state: machine.state,
|
||||
context: machine.context,
|
||||
previousState: machine.previousState,
|
||||
// Memoize return value to prevent unnecessary re-renders in consumers
|
||||
// This is critical because callbacks like handleLockAcquired depend on interactionMachine
|
||||
return useMemo(
|
||||
() => ({
|
||||
state: machine.state,
|
||||
context: machine.context,
|
||||
previousState: machine.previousState,
|
||||
|
||||
// State checks
|
||||
isIdle,
|
||||
isHovering,
|
||||
isMagnifierVisible,
|
||||
isMagnifierPanning,
|
||||
isMagnifierPinching,
|
||||
isMagnifierExpanded,
|
||||
isMapPanningMobile,
|
||||
isMapPanningDesktop,
|
||||
isPrecisionMode,
|
||||
isReleasingPrecision,
|
||||
// State checks
|
||||
isIdle,
|
||||
isHovering,
|
||||
isMagnifierVisible,
|
||||
isMagnifierPanning,
|
||||
isMagnifierPinching,
|
||||
isMagnifierExpanded,
|
||||
isMapPanningMobile,
|
||||
isMapPanningDesktop,
|
||||
isPrecisionMode,
|
||||
isReleasingPrecision,
|
||||
|
||||
// Compound checks
|
||||
showMagnifier,
|
||||
showCursor,
|
||||
isAnyPanning,
|
||||
isMobileInteraction,
|
||||
// Compound checks
|
||||
showMagnifier,
|
||||
showCursor,
|
||||
isAnyPanning,
|
||||
isMobileInteraction,
|
||||
|
||||
// Actions
|
||||
send,
|
||||
updateContext,
|
||||
}
|
||||
// Actions
|
||||
send,
|
||||
updateContext,
|
||||
}),
|
||||
[
|
||||
machine.state,
|
||||
machine.context,
|
||||
machine.previousState,
|
||||
isIdle,
|
||||
isHovering,
|
||||
isMagnifierVisible,
|
||||
isMagnifierPanning,
|
||||
isMagnifierPinching,
|
||||
isMagnifierExpanded,
|
||||
isMapPanningMobile,
|
||||
isMapPanningDesktop,
|
||||
isPrecisionMode,
|
||||
isReleasingPrecision,
|
||||
showMagnifier,
|
||||
showCursor,
|
||||
isAnyPanning,
|
||||
isMobileInteraction,
|
||||
send,
|
||||
updateContext,
|
||||
]
|
||||
)
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue