首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >antv/g6反应。如何更新图表?

antv/g6反应。如何更新图表?
EN

Stack Overflow用户
提问于 2021-04-15 12:39:44
回答 1查看 847关注 0票数 0

我有一个图表,需要更新后,点击按钮。但它每次都会创造一个新的画布。

我做错了什么?

https://codesandbox.io/s/gallant-galileo-ye91n

代码语言:javascript
复制
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>
    </>;
}
EN

回答 1

Stack Overflow用户

发布于 2022-02-23 15:31:54

请注意,无论何时更改data,都会调用一个new G6.Graph。所以一个新的画布将被创造出来。

尝试以下代码:

代码语言:javascript
复制
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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67108651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档