antvis/G6

state状态管理问题【已解决】 #4653

lovelyGFR posted onGitHub

问题描述

第一次selected的时候image显示 点击画布清空状态 第二次select的时候为啥image不显示呢QAQ

重现链接

https://codesandbox.io/s/g6-forked-c5m5lt?file=/index.js

重现步骤

同链接

预期行为

同链接

平台

  • 操作系统: [macOS, Windows, Linux, React Native ...]
  • 网页浏览器: [Google Chrome, Safari, Firefox]
  • G6 版本: [4.5.1 ... ]

屏幕截图或视频(可选)

No response

补充说明(可选)

No response


在添加图片图形的时候,暂时可以改成这样来解决:

const img = group.addShape("image", {
        name: "entity-edit",
        attrs: {
          x: 0,
          y: 0,
          width: 10,
          height: 10,
          img:
            "https://gw.alipayobjects.com/zos/basement_prod/012bcf4f-423b-4922-8c24-32a89f8c41ce.svg",
          cursor: "pointer",
          opacity: 0
        }
      });
group['shapeMap']["entity-edit"] = img;

关键是最后一行。这是因为图形可能从 group 的 shapeMap 取缓存导致的问题。下个小版本我会修复一下这个问题

posted by Yanyan-Wang almost 2 years ago

group['shapeMap']

但是我遇到了一个问题,直接这样写的话在ts中会报错 Element implicitly has an 'any' type because type 'IGroup' has no index signature. Did you mean to call 'group.get'?

改为group.get('shapeMap')['entity-image-icon'] = entityIcon;的话程序直接报错 TypeError: Cannot set properties of undefined (setting 'entity-image-icon')

把group的类型改为any又有点怪

还有一个问题就是在点击后,再点击画布,图片会闪一下,文字就不会,理论上都是内置节点类型,还有区别嘛(链接已更新)

@Yanyan-Wang

posted by lovelyGFR almost 2 years ago

gif : iShot_2023-06-16_15 25 46

posted by lovelyGFR almost 2 years ago

group.get('shapeMap')

这样吧,在设置之前先初始化一下 shapeMap group.set('shapeMap', group.get('shapeMap') || {})

posted by Yanyan-Wang almost 2 years ago

更新节点 image 会更新渲染,这个是 image 图形的一个问题

posted by Yanyan-Wang almost 2 years ago

group.get('shapeMap')

这样吧,在设置之前先初始化一下 shapeMap group.set('shapeMap', group.get('shapeMap') || {})

不行哎,好像只有那种索引访问的方式最终效果才是正确的

posted by lovelyGFR almost 2 years ago

更新节点 image 会更新渲染,这个是 image 图形的一个问题

后续会考虑优化这点吗,如果画布中图标(图片)较多的话,体验是不是不太好 而使用自定义DOM节点去写图标(图片)的话,G6的很多交互事件又不能使用了,感觉这是一个痛点呢

posted by lovelyGFR almost 2 years ago

group.set('shapeMap', group.get('shapeMap') || {})

group.get('shapeMap')

这样吧,在设置之前先初始化一下 shapeMap group.set('shapeMap', group.get('shapeMap') || {})

不行哎,好像只有那种索引访问的方式最终效果才是正确的

嗷是得 group['shapeMap'],你先 @ts-ignore 一下,下个版本我修掉就不用手动缓存了

posted by Yanyan-Wang almost 2 years ago

更新节点 image 会更新渲染,这个是 image 图形的一个问题

后续会考虑优化这点吗,如果画布中图标(图片)较多的话,体验是不是不太好 而使用自定义DOM节点去写图标(图片)的话,G6的很多交互事件又不能使用了,感觉这是一个痛点呢

暂时没有排期去解,应该只有状态变化的节点可能会出现闪一下

posted by Yanyan-Wang almost 2 years ago

Fund this Issue

$0.00
Funded

Pull requests