ReactFlow的ReactFlow实例事件传参undefined处理状态切换

ops/2024/9/23 20:22:40/

1.问题

ReactFlowReactFlow实例有些事件我们在不同的状态下并不需要,而且有时候传参会出现其它渲染效果,比如只读状态下我们不想要拖拉拽onEdgesChange连线重连或删除的功能。
请添加图片描述

2.思路

事件名称类型默认值
onEdgesChange(changes: EdgeChange[]) => void
使用这个方法来处理处理连线重新选择连接或者删除连线。
               

ReactFlow实例如果没有传监听事件方法,父节点就不会触发事件,那么我们试着切换传参处理。通过传参undefined,成功的没有触发对应事件,同时也没有出现渲染可拖拉拽连线的标志。

3.解决方案

import React, { useCallback, useRef, useState } from 'react';
import ReactFlow, { useNodesState, useEdgesState, Controls, updateEdge, addEdge } from 'reactflow';
import 'reactflow/dist/style.css';const initialNodes = [{id: '1',type: 'input',data: { label: 'Node A' },position: { x: 250, y: 0 },},{id: '2',type: 'output',data: { label: 'Node B' },position: { x: 250, y: 200 },}
];const initialEdges = [{ id: 'e1-2', source: '1', target: '2', label: 'updatable edge' }];const DeleteEdgeDrop = () => {const edgeUpdateSuccessful = useRef(true);const [nodes, , onNodesChange] = useNodesState(initialNodes);const [edges, setEdges, onEdgesChange] = useEdgesState(initialEdges);const onConnect = useCallback((params) => setEdges((els) => addEdge(params, els)), []);//	用于控制状态const [readonly, setReadonly] = useState(true);const onEdgeUpdateStart = useCallback(() => {edgeUpdateSuccessful.current = false;}, []);const onEdgeUpdate = useCallback((oldEdge, newConnection) => {edgeUpdateSuccessful.current = true;setEdges((els) => updateEdge(oldEdge, newConnection, els));}, []);const onEdgeUpdateEnd = useCallback((_, edge) => {if (!edgeUpdateSuccessful.current) {setEdges((eds) => eds.filter((e) => e.id !== edge.id));}edgeUpdateSuccessful.current = true;}, []);return (<ReactFlownodes={nodes}edges={edges}onNodesChange={onNodesChange}onEdgesChange={onEdgesChange}snapToGrid//	这里用条件语句切换传参//	如果不需要传参,只能传undefined!!!onEdgeUpdate={!readonly? onEdgeUpdate : undefined}onEdgeUpdateStart={onEdgeUpdateStart}onEdgeUpdateEnd={onEdgeUpdateEnd}onConnect={onConnect}fitViewattributionPosition="top-right"><Controls /></ReactFlow>);
};export default DeleteEdgeDrop;

4.结果

事件传参传undefined成功的取消了事件以及渲染效果。综上所述,在ReactFlowReactFlow实例事件可通过传参undefined取消传参或切换事件传参。
请添加图片描述


http://www.ppmy.cn/ops/37200.html

相关文章

当AI遇见现实:数智化时代的人类社会新图景

文章目录 一、数智化时代的机遇二、数智化时代的挑战三、如何适应数智化时代《图解数据智能》内容简介作者简介精彩书评目录精彩书摘强化学习什么是强化学习强化学习与监督学习的区别强化学习与无监督学习的区别 前言/序言 随着科技的日新月异&#xff0c;我们步入了一个前所未…

Benchmarksql压测

Benchmarksql压测 TPC-C测试的结果主要有两个指标&#xff0c;即流量指标&#xff08;Throughput,简称tpmC)和性价比&#xff08;Price/Performance,简称Price/tpmC)。 流量指标(Throughput,简称tpmC)&#xff1a;按照TPC组织的定义&#xff0c;流量指标描述了系统在执行支付…

Java中ArrayList、LinkedList与Vector的区别

ArrayList ArrayList是一个可以改变大小的数组&#xff0c;当更多的元素加入到ArrayList中时&#xff0c;其大小将会动态的增长&#xff0c;内部的元素可以直接通过get与set方法进行访问&#xff0c;因为ArrayList本质上就是一个数组。 LinkedList LinkedList是一个双向链表…

15【PS作图】像素画地图绘制

绘制视角 绘制地图的时候&#xff0c;有的人会习惯把要绘制的 房子、车子、围栏 小物件先画好&#xff0c;然后安放在地图上 但这样绘制出的各种物件之间&#xff0c;会缺乏凝聚力 既然物品都是人构造出的&#xff0c;不如以人的视角去一步步丰富地图&#xff1b; 比如下图…

算法训练营第二十一天 | LeetCode 513 找树左下角的值、LeetCode 112 路径总和、LeetCode 106 从中序与后序遍历构造二叉树

LeetCode 513 找树左下角的值 这题要求找树最底层最左边节点的值&#xff0c;用单纯的迭代法、递归法都不太好处理&#xff0c;一般的层序遍历法也不太行。但是可以修改下层序遍历&#xff0c;改成每一层从右往左遍历&#xff0c;依次往下&#xff0c;这样子访问的最后一个节点…

layui的treeTable组件,多层级上传按钮失效的问题解决

现象描述: layui的treeTable 的上传按钮在一层能用&#xff0c;展开后其他按钮正常点击&#xff0c;上传按钮无效。 具体原因没有深究&#xff0c;大概率是展开的子菜单没有被渲染treeTable的done管理到&#xff0c;导致没有重绘上传按钮。 解决方案: 不使用layu的上传组件方法…

【C++】string类的模拟实现

一、经典的string类问题 上一期&#xff0c;我们已经对string类有了简单的了解&#xff0c;大家能正常使用即可。在面试中&#xff0c;面试官喜欢让同学们自己来模拟实现string类&#xff0c;主要是实现string类的构造、拷贝构造、赋值运算符重载以及析构函数。请看以下string…

Nginx配置多个前端项目

1、修改nginx.conf配置文件&#xff1b; 2、必须包含默认的跟路径 location / { root D:/work/nginx-1.22.0/html; index index.html; } 3、添加要访问的前端项目信息&#xff0c;必须使用alias而不能使用root location /…