fix(MCPToolsButton): Optimize useEffect dependencies for server enabling logic

This commit is contained in:
Vaayne 2025-03-10 10:50:22 +08:00 committed by 亢奋猫
parent 4a8dcb2c08
commit 7ce55cf90f

View File

@ -28,19 +28,19 @@ const MCPToolsButton: FC<Props> = ({ enabledMCPs, onEnableMCP, ToolbarButton })
// Check if all active servers are enabled // Check if all active servers are enabled
const activeServers = mcpServers.filter((s) => s.isActive) const activeServers = mcpServers.filter((s) => s.isActive)
// Enable all active servers by default // This effect only runs when enableAll changes, not on every render
useEffect(() => { useEffect(() => {
if (activeServers.length > 0) { if (activeServers.length > 0) {
activeServers.forEach((server) => { activeServers.forEach((server) => {
if (enableAll && !enabledMCPs.includes(server)) { const isServerEnabled = enabledMCPs.includes(server)
onEnableMCP(server) if (enableAll && !isServerEnabled) {
} onEnableMCP(server) // Enable server if enableAll is true and server is disabled
if (!enableAll && enabledMCPs.includes(server)) { } else if (!enableAll && isServerEnabled) {
onEnableMCP(server) onEnableMCP(server) // Disable server if enableAll is false and server is enabled
} }
}) })
} }
}, [activeServers, enableAll, enabledMCPs, onEnableMCP]) }, [enableAll]) // Only depend on enableAll, not on enabledMCPs
const menu = ( const menu = (
<div ref={menuRef} className="ant-dropdown-menu"> <div ref={menuRef} className="ant-dropdown-menu">