我有一个图表,需要更新后,点击按钮。但它每次都会创造一个新的画布。
我做错了什么?
https://codesandbox.io/s/gallant-galileo-ye91n
const Graph = () => {
let graph = null;
const [data, setData] = useState({ nodes: [{ id: 'node1', label: '1' }, { id: 'node2', label: '2' },], edges: [], });
const ref = React.useRef(null);
useEffect(() => {
graph = new G6.Graph({
container: ref.current,
width: 300,
height: 300,
modes: {
default: ['drag-canvas', 'zoom-canvas', 'drag-node']
},
});
graph.data(data);
graph.render();
return () => {
graph.changeData(data);
};
}, [data]);
const handleClick = () => {
setData({
nodes: [
{ id: 'node1', label: '1' },
{ id: 'node2', label: '2' },
],
edges: [
{ source: 'node1', target: 'node2' },
],
});
}
return <>
<button onClick={handleClick}>changeData</button>
<div ref={ref}></div>
</>;
}发布于 2022-02-23 15:31:54
请注意,无论何时更改data,都会调用一个new G6.Graph。所以一个新的画布将被创造出来。
尝试以下代码:
import { useEffect, useRef, useState } from "react";
import G6 from "@antv/g6";
let graph = null;
const Graph = () => {
const [data, setData] = useState({
nodes: [
{ id: "node1", label: "1" },
{ id: "node2", label: "2" },
],
edges: [],
});
const ref = useRef(null);
useEffect(() => {
if (!graph) {
graph = new G6.Graph({
container: ref.current,
width: 300,
height: 300,
modes: {
default: ["drag-canvas", "zoom-canvas", "drag-node"],
},
});
}
graph.data(data);
graph.render();
return () => {
graph.changeData(data);
};
}, [data]);
const handleClick = () => {
setData({
nodes: [
{ id: "node1", label: "1" },
{ id: "node2", label: "2" },
],
edges: [{ source: "node1", target: "node2" }],
});
};
return (
<>
<button onClick={handleClick}>changeData</button>
<div ref={ref}></div>
</>
);
};
export default Graph;https://stackoverflow.com/questions/67108651
复制相似问题