From 42ffbd728c73e56e328d4dc9a2997ab83aef3d8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=A1=97=E8=A7=92=E5=B0=8F=E6=9E=97?= <1013335014@qq.com> Date: Fri, 15 Dec 2023 09:29:41 +0800 Subject: [PATCH] =?UTF-8?q?Feat=EF=BC=9A=E4=BC=98=E5=8C=96reRender?= =?UTF-8?q?=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- simple-mind-map/index.js | 10 ++++------ simple-mind-map/src/core/render/Render.js | 11 ++++++++++- simple-mind-map/src/utils/Lru.js | 5 +++++ 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/simple-mind-map/index.js b/simple-mind-map/index.js index 57f45e29..572a50d2 100644 --- a/simple-mind-map/index.js +++ b/simple-mind-map/index.js @@ -168,12 +168,10 @@ class MindMap { // 重新渲染 reRender(callback, source = '') { - this.clearDraw() // 清空画布的操作不能放到队列任务里,否则当reRender后又执行了render,当前回调会被覆盖掉 - this.batchExecution.push('render', () => { - this.initTheme() - this.renderer.reRender = true - this.renderer.render(callback, source) - }) + this.renderer.reRender = true // 标记为重新渲染 + this.renderer.clearCache() // 清空节点缓存池 + this.clearDraw() // 清空画布 + this.render(callback, (source = '')) } // 获取或更新容器尺寸位置信息 diff --git a/simple-mind-map/src/core/render/Render.js b/simple-mind-map/src/core/render/Render.js index a814a172..5fafa7b1 100644 --- a/simple-mind-map/src/core/render/Render.js +++ b/simple-mind-map/src/core/render/Render.js @@ -387,6 +387,13 @@ class Render { this.mindMap.keyCommand.restore() } + // 清空节点缓存池 + clearCache() { + this.layout.lru.clear() + this.nodeCache = {} + this.lastNodeCache = {} + } + // 渲染 render(callback = () => {}, source) { // 如果当前还没有渲染完毕,不再触发渲染 @@ -431,7 +438,9 @@ class Render { this.waitRenderingParams = [] this.render(...params) } else { - if (this.reRender) this.reRender = false + if (this.reRender) { + this.reRender = false + } // 触发一次保存,因为修改了渲染树的数据 if ( this.mindMap.richText && diff --git a/simple-mind-map/src/utils/Lru.js b/simple-mind-map/src/utils/Lru.js index 4edc0213..b1d89dd5 100644 --- a/simple-mind-map/src/utils/Lru.js +++ b/simple-mind-map/src/utils/Lru.js @@ -35,4 +35,9 @@ export default class Lru { return this.pool.get(key) } } + + clear() { + this.size = 0 + this.pool = new Map() + } }