1. 设置默认边节点为自己定义节点
<ReactFlow
defaultEdgeOptions={{ type: 'buttonEdge' }}
>
<Background />
<Controls />
</ReactFlow>
how to set default edge type when using typescript #1355
2. 给自定义node动态添加handle锚点
const CategorizeHandle = ({ top, right, text, idx }: IProps) => {
return (
<Handle
type="source"
position={Position.Right}
id={`CategorizeHandle${idx}`}
isConnectable
style={{
...DEFAULT_HANDLE_STYLE,
top: `${top}%`,
right: `${right}%`,
background: 'red',
}}
>
<span className={styles.categorizeAnchorPointText}>{text}</span>
</Handle>
);
};
连接动态锚点到另一个节点,报错
[React Flow]: Couldn't create edge for source handle id: "CategorizeHandle1", edge id: reactflow__edge-Categorize:TangyWorldsRelateCategorizeHandle1-Generate:AllHotelsTelld. Help: https://reactflow.dev/error#008
点击报错链接查看文档,也没解决我的问题,还是调试吧,使用chrome devtools的
可以看出新增锚点的id并没有出现在sourceHandleBounds.source中,
在issue里找到了思路,dynamic handle #4306 根据文档 useUpdateNodeInternals在新增锚点的函数中加入updateNodeInternals(id);
,可以成功连线了,如下图
3. 非拖拽方式建立连接线不会触发OnConnect钩子
页面上有个下拉框,选择不同的target则当前节点跟所选的节点连线,这个时候并不会触发OnConnect钩子,道理应该跟 setFieldsValue 不会触发 onFieldsChange 和 onValuesChange?一样,为了防止死循环的问题。
addEdge: (connection: Connection) => {
set({
edges: addEdge(connection, get().edges),
});
get().deletePreviousEdgeOfClassificationNode(connection);
},
4. 禁用部分节点的局部的拖拽功能
Disable dragging when hovering on a node in Reactflow该条是禁用所有节点的拖拽,那怎么禁用部分节点的局部拖拽?比如下面的输入框需要选中文本,而不是拖动节点。
解决办法:
Drag Handle
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。