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() + } }