如何手动销毁Dojo 2 Widget?本问题仅针对Dojo 2,不涉及Dojo 1
如何手动销毁Dojo 2 Widget?
嘿,针对Dojo 2的Widget手动销毁问题,我来给你理清楚具体的操作步骤和关键注意事项——毕竟这和Dojo 1的机制差异不小,得针对性处理。
Dojo 2的Widget类本身就内置了destroy()方法,这是手动销毁Widget的核心入口,调用它会完成一系列清理工作:移除关联的DOM节点、解绑事件监听器、递归销毁子Widget,同时释放实例占用的资源,避免内存泄漏。
具体操作步骤
- 获取Widget实例:不管你是直接创建的Widget实例,还是通过应用上下文获取到的,首先得拿到要销毁的Widget对象。
- 调用
destroy()方法:直接对实例调用该方法即可完成销毁。
举个实际的代码例子你就明白了:
import { Widget } from '@dojo/widget-core/Widget'; import { v } from '@dojo/widget-core/d'; import { renderer } from '@dojo/widget-core/renderer'; // 自定义一个简单的Widget class MyCustomWidget extends Widget { protected render() { return v('div', { id: 'my-widget' }, ['这是一个Dojo 2 Widget']); } } // 创建Widget实例并挂载到DOM const myWidget = new MyCustomWidget(); const container = document.getElementById('app-container'); renderer(myWidget).mount({ domNode: container }); // 手动销毁Widget myWidget.destroy();
关键注意事项
- 递归销毁子Widget:如果你的Widget包含子Widget,调用父Widget的
destroy()会自动递归销毁所有子Widget,不用你手动逐个处理。 - 销毁后的状态:Widget实例被销毁后,就不能再被重新挂载或使用了,所有关联的资源都会被清理。
- 无挂载实例的销毁:即使Widget还没被挂载到DOM上,调用
destroy()也不会报错,它会完成实例内部的资源清理工作。
内容的提问来源于stack exchange,提问作者Sagar Kharche
相关产品推荐
相关产品推荐

