如何在单击删除按钮时删除反应流中的元素

Dha*_*oni 3 javascript element reactjs redux react-flow

我在我的项目中使用react-flow-renderer。我们有一个要求,我们想通过单击该元素来删除该元素。

在此输入图像描述

我尝试过以下代码。

const onElementsRemove = (elementsToRemove) =>
setElements((els) => removeElements(elementsToRemove, els));
Run Code Online (Sandbox Code Playgroud)

我也把这个

在此输入图像描述

但我们不希望这样。

任何人都可以知道如何做到这一点,这将是一个很大的帮助

Nic*_*ing 9

实际上,我自己使用带有自定义删除按钮的 React Flow 控件解决了这个问题。在组件中<ReactFlow>,我添加了onElementClick使用 React hook 将所选元素存储在状态中的 prop。在onClick按钮的 prop 中,我有另一个钩子,它从状态获取所选元素、树的所有边,并调用它将getConnectedEdges()返回连接到所选元素的所有边。然后只需将包含所选元素和连接边的数组传递到您的onElementsRemove().

这是 的文档onElementClickhttps://reactflow.dev/docs/api/component-props/

<ReactFlow 
    className={flowStyles}
    elements={elements}
    onElementClick={onClickElement}
>
  <Controls showInteractive={false}>
    <ControlButton onClick={onClickElementDelete}>
      <DeleteIcon />
    </ControlButton>
  </Controls>
</ReactFlow>
Run Code Online (Sandbox Code Playgroud)

const onClickElement = useCallback((event: ReactMouseEvent, element: Node | Edge) => {
  // Set the clicked element in local state
  setState({
    clickedElement: [element]
  })
}, [])
Run Code Online (Sandbox Code Playgroud)

这是 的文档getConnectedEdgeshttps://reactflow.dev/docs/api/helper-functions/

const onClickElement = useCallback((event: ReactMouseEvent, element: Node | Edge) => {
  // Set the clicked element in local state
  setState({
    clickedElement: [element]
  })
}, [])
Run Code Online (Sandbox Code Playgroud)