微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

react-graph-vis - Grapg 甚至在状态更改后也不会重新渲染

如何解决react-graph-vis - Grapg 甚至在状态更改后也不会重新渲染

当我尝试更新悬停事件的状态时,实际状态值正在发生变化,但图形没有重新渲染。

在控制台中,我能够看到节点标签已更改为示例。但图表没有重新渲染。

这是我的基于 React 函数的组件。

import React,{ useEffect,useState } from 'react';
import Graph from 'react-graph-vis';

import './vis-network.css';

function RelationGraph1() {
  const [graph,setGraph] = useState({
    nodes: [
      {
        id: 1,label: 'Node 1',title: '',},{ id: 2,label: 'Node 2',title: '' },{ id: 3,label: 'Node 3',{ id: 4,label: 'Node 4',{ id: 5,label: 'Node 5',],edges: [
      { from: 1,to: 2 },{ from: 1,to: 3 },{ from: 2,to: 4 },to: 5 },});

  const options = {
    layout: {
      hierarchical: false,edges: {
      color: '#1D1D1D',interaction: {
      hover: true,navigationButtons: true,tooltipDelay: 0,nodes: {
      borderWidth: 0,borderWidthSelected: 0,color: '#0262C4',shape: 'circle',size: 1,shadow: {
        enabled: true,color: 'rgba(0,0.5)',size: 10,x: 5,y: 5,font: {
        color: '#fff',size: 13,bold: {
          mod: 'bold',};

  const events = {
    select: function (event) {
      var { nodes,edges } = event;
      console.log('Selected nodes:');
      console.log(nodes);
      console.log('Selected edges:');
      console.log(edges);
    },showPopup: (id) => { // node id
      const data = graph.nodes.map((el) => {
        if (el.id === id) {
          el.label = `sample node name`;
        }
        return el;
      });
      setGraph({ ...graph,nodes: data });
    },};

  return (
    <Graph
      graph={graph}
      options={options}
      events={events}
      style={{ height: '450px' }}
    />
  );
}

export default RelationGraph1;

非常感谢您的帮助。谢谢!

解决方法

我能够像这样更新hoverNode事件中的标签:

    hoverNode: (e) => {
      const data = graph.nodes.map((el) => {
        if (el.id === e.node) return { ...el,label: "sample node name" };
        else return el;
      });

      const temp = { ...graph };
      temp.nodes = data;
      setGraph(temp);
    },

示例:https://codesandbox.io/s/long-bird-4h444?file=/src/App.js:1235-1501

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?