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

当思维导图在渲染过程中,此时重新渲染,可能导致思维导图样式错乱 #645

Closed
huang-yf3160 opened this issue May 10, 2024 · 9 comments

Comments

@huang-yf3160
Copy link

当思维导图在渲染过程中,此时重新渲染,可能导致思维导图样式错乱

是否有规避方案呢?

@wanglin2
Copy link
Owner

可以贴一下代码和动图

@huang-yf3160
Copy link
Author

可以贴一下代码和动图

代码就是简单的调用render,大概逻辑是ai生成流式内容,然后动态渲染到思维导图上
动画

@huang-yf3160
Copy link
Author

而且在多节点情况下容易复现,当前思维导图有大概2000个节点

@wanglin2
Copy link
Owner

重新渲染部分的代码可以贴一下,代码不方便截图,伪代码也可以写几行,不然我也不知道怎么去复现这个问题

@huang-yf3160
Copy link
Author

重新渲染部分的代码可以贴一下,代码不方便截图,伪代码也可以写几行,不然我也不知道怎么去复现这个问题
调用流式接口,在获取数据内一直调用方法,应该可以用定时器模拟
onData: () => {
// 该方法为更新/新增目标节点下子节点内容,mindMapData 为 思维导图数据
const data = updateNodeContent(mindMapData, uid, node)
mindMap.renderer.setData(data)
this.mindMap.render()
}
大概逻辑是这样

@wanglin2
Copy link
Owner

image

我试了一下1000多个节点,也没有错乱,只要新数据的节点uid没有变化按理说是没问题的

@huang-yf3160
Copy link
Author

image

我试了一下1000多个节点,也没有错乱,只要新数据的节点uid没有变化按理说是没问题的

如果uid发生变化了呢?而且我们会在数据获取完整后,调用一次reRender事件,会出现gif最后几秒的画面,就是完全乱掉;
有没有您觉得可能出现问题的点,我们去排查一下呢,因为我们对您这边思维导图做了很多魔改,有可能在您这边是不复现的

@wanglin2
Copy link
Owner

image
我试了一下1000多个节点,也没有错乱,只要新数据的节点uid没有变化按理说是没问题的

如果uid发生变化了呢?而且我们会在数据获取完整后,调用一次reRender事件,会出现gif最后几秒的画面,就是完全乱掉; 有没有您觉得可能出现问题的点,我们去排查一下呢,因为我们对您这边思维导图做了很多魔改,有可能在您这边是不复现的

reRender很慢,最好uid不要改变,只调render,看想象是因为上一次渲染的节点没有被删除,又创建了新节点,可以看一下调试一下render类的render方法

@huang-yf3160
Copy link
Author

image
我试了一下1000多个节点,也没有错乱,只要新数据的节点uid没有变化按理说是没问题的

如果uid发生变化了呢?而且我们会在数据获取完整后,调用一次reRender事件,会出现gif最后几秒的画面,就是完全乱掉; 有没有您觉得可能出现问题的点,我们去排查一下呢,因为我们对您这边思维导图做了很多魔改,有可能在您这边是不复现的

reRender很慢,最好uid不要改变,只调render,看想象是因为上一次渲染的节点没有被删除,又创建了新节点,可以看一下调试一下render类的render方法

https://github.com/wanglin2/mind-map/blob/98f0d5e0fc20958db3978b0918aa1655c9913017/simple-mind-map/src/core/render/Render.js#L431

当前定位到在此处如果有等待的情况下,再次去渲染时,就会同一个节点在图上有两个,就会出现如gif的情况,但不太清楚为啥上一次的节点没被删除

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants