You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何手动销毁Dojo 2 Widget?本问题仅针对Dojo 2,不涉及Dojo 1

如何手动销毁Dojo 2 Widget?

嘿,针对Dojo 2的Widget手动销毁问题,我来给你理清楚具体的操作步骤和关键注意事项——毕竟这和Dojo 1的机制差异不小,得针对性处理。

Dojo 2的Widget类本身就内置了destroy()方法,这是手动销毁Widget的核心入口,调用它会完成一系列清理工作:移除关联的DOM节点、解绑事件监听器、递归销毁子Widget,同时释放实例占用的资源,避免内存泄漏。

具体操作步骤

  1. 获取Widget实例:不管你是直接创建的Widget实例,还是通过应用上下文获取到的,首先得拿到要销毁的Widget对象。
  2. 调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:05:55