<ReactFlow>
组件中,我添加了onElementClick
属性,它使用React钩子将选择的元素存储在状态中。对于按钮的onClick
属性,我有另一个钩子,它从状态中获取所选元素、树的所有边缘,并调用getConnectedEdges()
,该方法将返回连接到所选元素的所有边缘。然后只需将所选元素和连接的边缘数组传递给您的onElementsRemove()
函数即可。onElementClick
的文档:
https://reactflow.dev/docs/api/component-props/
<ReactFlow
className={flowStyles}
elements={elements}
onElementClick={onClickElement}
>
<Controls showInteractive={false}>
<ControlButton onClick={onClickElementDelete}>
<DeleteIcon />
</ControlButton>
</Controls>
</ReactFlow>
const onClickElement = useCallback((event: ReactMouseEvent, element: Node | Edge) => {
// Set the clicked element in local state
setState({
clickedElement: [element]
})
}, [])
这里是getConnectedEdges
的文档。 https://reactflow.dev/docs/api/helper-functions/
const onClickElementDelete = useCallback(() => {
// Get all edges for the flow
const edges = elements.filter((element: Node | Edge) => isEdge(element))
// Get edges connected to selected node
const edgesToRemove = getConnectedEdges(state.clickedElement, edges)
onElementsRemove([...state.clickedElement, ...edgesToRemove])
}
}, [elements, onElementsRemove, state.clickedElement])
您需要在自定义节点的数据属性中添加删除功能,并在自定义节点的删除按钮点击时调用该函数。
创建自定义节点时 =>
const newNode = {
id: nodeID,
type,
position,
data: {
onDelete : yourFunctionToDelete
}}
在删除按钮中自定义节点代码 => onClick={props.data.onDelete}
deleteNode
操作,则可以通过 const deleteNode = useStore((s) => s.deleteNode);
在自定义节点中访问它。const deleteNodeById = (id) => {
flowInstance.setNodes((nds) => nds.filter((node) => node.id !== id))
}
<DeleteOutlined
onClick={() => deleteNodeById(data.id)}
/>
removeElement
函数以及展示如何存储或渲染元素的代码,您是否将它们保存在状态中? - Kevin Haxhi