Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2.x 的X6 node.setData()无法做到强制替换 #3262

Closed
JamesTing opened this issue Feb 20, 2023 · 6 comments
Closed

2.x 的X6 node.setData()无法做到强制替换 #3262

JamesTing opened this issue Feb 20, 2023 · 6 comments
Labels
type: discussion 讨论 Usage questions, guidance, and other discussions

Comments

@JamesTing
Copy link

JamesTing commented Feb 20, 2023

问题描述

背景

  1. 下面是某个自定义react节点,其中data字段的数据。
  2. 我的目标是修改shapeConf.lanes
    {
    attr:{...},
    port:{...},
    data: {
    "text": "",
    "shapeStyle": {
    "color": "#14AE5C",
    "fillMode": "stroke",
    "fillColor": "#14AE5C",
    "fontColor": "#fff",
    "borderColor": "#0f8044",
    "borderStyle": "solid"
    },
    "shapeType": "flow-lane",
    "shapeConf": {
    "lanes": [
    {
    "name": "泳道A",
    "width": 223
    },
    {
    "name": "泳道B",
    "width": 220
    },
    {
    "name": "泳道C",
    "width": 220
    }
    ]
    }
    }
    ...
    }

问题:setData()生效范围令人迷惑,{ overwrite: true}无法做到强制替换更新

重现链接

暂无

重现步骤

现象1:option里有{ overwrite: true}时,支持删除lane数组内元素,但是不支持修改元素属性
props.node.setData({ ...props.node.getData(), ...value }, { overwrite: true})

现象2:去掉{ overwrite: true}时,仅支持修改lane数组内元素属性,不支持删除元素
props.node.setData({ ...props.node.getData(), ...value })

预期行为

overwrite时,请完全以我输入的为准。
或者,说明白overwrite的作用方式。

平台

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

屏幕截图或视频(可选)

No response

补充说明(可选)

No response

@NewByVector
Copy link
Contributor

现象 1 和 2 中 value 值分别是什么?

@NewByVector NewByVector added the type: discussion 讨论 Usage questions, guidance, and other discussions label Feb 21, 2023
@JamesTing
Copy link
Author

原始数据
....
data: {
....
"shapeConf": {
"lanes": [
{"name": "泳道A","width": 223},
{"name": "泳道B","width": 220},
{"name": "泳道C","width": 220}
]}
....
}
....

现象1:使用{ overwrite: true }

  1. 如果将“泳道C”该为“泳道D”,操作无效
  2. 删除了“泳道C”这个元素,可以成功。 value值如下:
    "shapeConf": {
    "lanes": [
    {"name": "泳道A","width": 223},
    {"name": "泳道B","width": 220},
    ]
    }

现象2:不用{ overwrite: true }

  1. 删除“泳道C”这个元素,操作无效
  2. 更改“泳道C”为“泳道D”,可以成功。value值如下:
    "shapeConf": {
    "lanes": [
    {"name": "泳道A","width": 223},
    {"name": "泳道B","width": 220},
    {"name": "泳道C---改成泳道D","width": 220}
    ]}

@NewByVector

@JamesTing
Copy link
Author

尝试repalceData()、updateData(),以及增加各种option,都无法实现既能修改数组元素属性值、删除数组元素两个操作。
最终妥协,使用removeData + setData()解决问题。
这个真是个bug,建议X6官方关注。

@DaYesahh
Copy link

我也刚遇到了类似的问题。
场景:节点已经有数据[1,2],但是使用setData替换成[2],在自定义节点那儿获取node.get("data")就会显示[2,2],而正确的数据居然在store的previous中

@maqingbo
Copy link

maqingbo commented Mar 1, 2024

尝试repalceData()、updateData(),以及增加各种option,都无法实现既能修改数组元素属性值、删除数组元素两个操作。 最终妥协,使用removeData + setData()解决问题。 这个真是个bug,建议X6官方关注。

妈呀,相同的问题,issue 翻了一圈终于找到一个解决方案了😂感谢

@SunYuanOnly
Copy link

解决了吗?遇到相同的问题

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
type: discussion 讨论 Usage questions, guidance, and other discussions
Projects
None yet
Development

No branches or pull requests

5 participants