vue3 的 onScopeDispose 是什么作用
onScopeDispose 是 Vue 3 中用于管理响应式副作用的一个重要 API,主要用于在当前活跃的 effect 作用域上注册一个处理回调函数。当这个作用域停止时,所注册的回调函数会被调用。这种机制使得开发者能够有效地清理和管理资源,尤其是在组合式函数中。
功能与用途
-
注册清理回调:通过 onScopeDispose,开发者可以注册一个回调函数,这个函数会在 effect 作用域停止时执行。这类似于组件的 onUnmounted 钩子,但它不与特定组件实例耦合,而是与当前的 effect 作用域关联[1][2][4]。
-
替代 onUnmounted:在组合式 API 中,onScopeDispose 可以作为 onUnmounted 的替代品,特别是在需要创建多个嵌套作用域时。它允许在这些作用域内进行清理,而不必依赖于组件的生命周期[3][4][5]。
-
支持动态作用域管理:在使用 effectScope() 创建的作用域中,可以通过 getCurrentScope() 获取当前作用域,并在适当的时候停止它。调用 stop() 方法时,会触发 onScopeDispose 注册的回调,从而进行必要的清理工作[1][2][6]。
示例代码
以下是一个使用 onScopeDispose 的简单示例:
<script setup>
import { ref, computed, watch, effectScope, getCurrentScope, onScopeDispose } from 'vue';
const counter = ref(0);
const scope = effectScope();
scope.run(() => {
const doubled = computed(() => counter.value * 2);
watch(doubled, () => console.log('Doubled value:', doubled.value));
// 注册清理回调
onScopeDispose(() => {
console.log('Cleaning up...');
});
});
// 停止作用域并触发清理
setTimeout(() => {
scope.stop(); // 这将触发 onScopeDispose 注册的回调
}, 5000);
</script>
在这个示例中,当 scope.stop()
被调用时,会触发 onScopeDispose
中定义的清理逻辑,从而输出 “Cleaning up…” 的信息。这显示了如何有效地管理副作用和资源释放。
总之,onScopeDispose 提供了一种灵活且强大的方式来处理 Vue 3 中的响应式副作用,使得代码更加模块化和可维护。
Citations:
[1] https://jingyan.baidu.com/article/8275fc86d0b84507a13cf60e.html
[2] https://www.luyouwang.com/10129.html
[3] https://cha.ip66.net/news/2209.html
[4] https://jingyan.baidu.com/article/915fc414e84b8051394b20d3.html
[5] https://juejin.cn/post/7055313093605195789
[6] https://developer.aliyun.com/article/1130755
[7] https://blog.csdn.net/Davidwatt/article/details/127605902
[8] https://blog.csdn.net/gyueh/article/details/117563713