当前位置: 首页 > news >正文

vue3中的effectScope有什么作用,如何使用?如何自动清理

vue3中的effectScope有什么作用,如何使用?如何自动清理

vue3中的effectScope有什么作用,如何使用

    • 官网介绍:
    • 作用
    • 特点
    • 简单示例:
    • 自动清理示例

官网介绍:

创建一个 effect 作用域,可以捕获其中所创建的响应式副作用 (即计算属性和侦听器),这样捕获到的副作用可以一起处理。

作用

scope.run内可创建多个 像watchwatchEffect这种响应式函数,然后通过scope.stop()停止里面的所有响应式函数。

批量管理副作用: 可以把多个 effect 函数放到一个 effectScope 里,然后通过 effectScope.stop() 方法一次性停止所有这些副作用函数的运行。
组件卸载时清理副作用: 在组件卸载时,使用 effectScope 能够更方便地清理所有相关的副作用,避免内存泄漏。
支持嵌套作用域

特点

  • Vue 3.2+ 新增的 API
  • 主要用于组织和批量管理 effect
  • 特别适合在组件 setup 中使用
  • 支持自动清理

简单示例:

<script setup lang="ts">import { effectScope, reactive, watch, watchEffect } from 'vue';const scope = effectScope();const state = reactive({ count: 0 });scope.run(() => {// 这些 effect 都会被 scope 管理watch(() => state.count,(count) => {console.log('effectScope管理的watch监听:', count);});watchEffect(() => {console.log('effectScope管理的watchEffect监听', state.count);});});// 停止所有 effect,会将上面的watch和watchEffect都停止。const handleStop = () => {scope.stop();};// 自己调用watch监听const singleWatch = watch(() => state.count,(count) => {console.log('单个监听watch:', count);});// 停止自己创建的watch监听const handleStopWatch = () => {singleWatch();};
</script><template><a-button @click="state.count++">count:{{ state.count }}</a-button><a-button @click="handleStop">停止</a-button><a-button @click="handleStopWatch">停止 watch</a-button>
</template><style scoped lang="less"></style>

自动清理示例

使用onScopeDispose实现组件卸载时自动,自动清理effectScope

import { effectScope, onScopeDispose } from 'vue'export default {setup() {const scope = effectScope()scope.run(() => {// 所有响应式逻辑const state = reactive({ /*...*/ })watch(/*...*/)computed(/*...*/)})onScopeDispose(() => {scope.stop() // 组件卸载时自动清理})return {}}
}

相关文章:

  • 使用yolo用python检测人脸
  • 蓝桥杯 4. 卡片换位
  • QT开发技术【QT实现桌面右下角消息】
  • 【滑动窗口+哈希表/数组记录】Leetcode 76. 最小覆盖子串
  • 解决ssh拉取服务器数据,要多次输入密码的问题
  • 基于ssm的同城上门维修平台管理系统(源码+数据库)
  • 矫平机深度解析:操作实务、行业标准与智能化升级
  • 【金仓数据库征文】交通行业的国产化数据库替换之金仓数据库KingbaseES应用实践
  • FlinkJobmanager深度解析
  • 【中级软件设计师】函数调用 —— 传值调用和传地址调用 (附软考真题)
  • C#中实现XML解析器
  • Vue 3 父子组件通信案例详解:Props 与 Emits 实战
  • MySQL 详解之用户、权限与审计:保障数据安全的基石
  • MCP协议:AI与工具无缝连接的“万能插头“及最佳实践指南
  • MySQL 详解之函数:数据处理与计算的利器
  • SQLMesh 表格对比指南:深入理解 table_diff 工具的实际应用
  • 每日两道leetcode(补充一)
  • 【FreeRTOS】事件标志组
  • 58、微服务保姆教程(一)
  • 第十一天 主菜单/设置界面 过场动画(Timeline) 成就系统(Steam/本地) 多语言支持
  • 邮轮、无人机、水上运动……上海多区推动文旅商体展融合发展
  • 美称中美芬太尼问题谈判但中方不够真诚,外交部回应
  • 现场|贝聿铭上海大展:回到他建筑梦的初始之地
  • 商务部谈中欧汽车谈判进展
  • 国家发改委:更大力度、更实举措促进民营经济高质量发展
  • 著名诗人、中国城市发展研究院原常务副院长吕贵品逝世