当使用Flow作为工具组件时,点击并选择另一个进程,将出现一个弹出窗口。
jpfvwuh41#
要解决在Flow中作为工具组件点击并选择另一个进程导致弹出窗口出现,以及组件 Flink 和撤退的问题,您需要确保状态转换得到正确处理。 Flink 和撤退的行为可能是由于isOpen和isTransitioning状态的计时和状态管理引起的。以下是解决了这些问题的SelectionMenu组件的修订版本:
isOpen
isTransitioning
SelectionMenu
import { useEffect, useState } from "react"; import { NodeToolbar } from "reactflow"; import { GradientGroup } from "../../../../icons/GradientSparkles"; import useFlowStore from "../../../../stores/flowStore"; import { validateSelection } from "../../../../utils/reactflowUtils"; export default function SelectionMenu({ onClick, nodes, isVisible, lastSelection, }) { const edges = useFlowStore((state) => state.edges); const [disable, setDisable] = useState<boolean>( lastSelection && edges.length > 0 ? validateSelection(lastSelection!, edges).length > 0 : false ); const [isOpen, setIsOpen] = useState(false); const [isTransitioning, setIsTransitioning] = useState(false); const [lastNodes, setLastNodes] = useState(nodes); useEffect(() => { if (isOpen) { setDisable(validateSelection(lastSelection!, edges).length > 0); } else { setDisable(false); } }, [isOpen, lastSelection, edges]); useEffect(() => { setLastNodes(nodes); }, [nodes]); useEffect(() => { if (isVisible) { setIsOpen(true); setTimeout(() => { setIsTransitioning(true); }, 50); } else { setIsTransitioning(false); setTimeout(() => { setIsOpen(false); }, 500); } }, [isVisible]); return ( <NodeToolbar isVisible={isOpen} offset={5} nodeId={ lastNodes && lastNodes.length > 0 ? lastNodes.map((n) => n.id) : [] } > <div className="h-10 w-28 overflow-hidden"> <div className={ "duration-400 h-10 w-24 rounded-md border border-indigo-300 bg-background px-2.5 text-primary shadow-inner transition-all ease-in-out" + (isTransitioning ? " opacity-100" : " opacity-0") } > <button className={`${ disable ? "flex h-full w-full cursor-not-allowed items-center justify-between text-sm text-muted-foreground" : "flex h-full w-full items-center justify-between text-sm" }`} onClick={onClick} disabled={disable} > <GradientGroup strokeWidth={1.5} size={22} className="text-primary" disabled={disable} /> Group </button> </div> </div> </NodeToolbar> ); }
关键更改:
lastSelection
edges
useEffect
setDisable
setLastNodes
nodes
NodeToolbarComponent
FlowPage
rkue9o1l2#
@alex-ge123你能提供更多细节和截图吗?
2条答案
按热度按时间jpfvwuh41#
要解决在Flow中作为工具组件点击并选择另一个进程导致弹出窗口出现,以及组件 Flink 和撤退的问题,您需要确保状态转换得到正确处理。 Flink 和撤退的行为可能是由于
isOpen
和isTransitioning
状态的计时和状态管理引起的。以下是解决了这些问题的
SelectionMenu
组件的修订版本:关键更改:
isOpen
、lastSelection
和edges
的useEffect
中正确调用setDisable
。setLastNodes
更新为直接依赖于nodes
,确保在nodes
更改时正确更新。isOpen
和isTransitioning
的状态转换,以确保平滑的可见性更改。此外,您还可以参考
NodeToolbarComponent
中的FlowPage
,以获取更高级的状态管理和各种节点交互的处理,这可能会进一步提供关于管理状态转换和避免 Flink 问题的信息。rkue9o1l2#
@alex-ge123
你能提供更多细节和截图吗?