Vue响应式进阶常用API之effectScope、getCurrentScope、onScopeDispose学习

effectScope

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

具体解释:就是创建一个effct作用域,当需要的时候可以调用里面的监听、计算熟悉等,不需要的时候可以清空

getCurrentScope

获取当前组件是否还有活动的effect,可以用在onBeforeUnmount、onUnmounted等钩子中

onScopeDispose

当前页面或组件注销时会触发 onScopeDispose 事件

示例:

javascript 复制代码
<template>
  <h2>进阶练习</h2>
  <div>
    <div>姓名: {{ data.name }}</div>
    <div>年龄: {{ data.age }}</div>
    <div>个人信息:{{ data.info }}</div>
    <button @click="handleChange(data.age)">修改信息</button>
  </div>
</template>

<script setup>
import { reactive, effectScope, watch, getCurrentScope, onUnmounted, onScopeDispose } from 'vue'
const baseObj = {
  name: 'Alan',
  age: 18,
  job: '码农',
  info: ''
}
const data = reactive(baseObj)

const effect = effectScope()
// 获取当前effect实例, 当前组件是否还有活动的effect,可以用在onBeforeUnmount、onUnmounted等钩子中
const allScope = getCurrentScope()

effect.run(() => {
  watch(
    () => data.age,
    () => {
      data.info = `${data.name}现在${data.age}岁了`
    }
  )
})

console.log('当前组件是否有活动effect', allScope.active)
onUnmounted(() => {
  // 停止当前作用域内所有的effect
  allScope.stop()
})
// 当前页面或组件注销时会触发 onScopeDispose 事件
onScopeDispose(() => {
  // allScope.stop()
  console.log('当前组件注销了, 已停止effect所有侦听')
})
const handleChange = (age) => {
  if (age >= 23) {
    // 处理掉当前作用域内的所有effect
    effect.stop()
  } else {
    data.age += 1
  }
}
</script>
相关推荐
Li_RuiQi11 小时前
DAgger与交互式模仿学习_ACT学习笔记
笔记·学习
Canmag 兴隆磁性11 小时前
回复磁导率 μ_R:永磁体在动态磁路中的关键参数
开发语言·学习·r语言·永磁材料·充磁·磁导率
chunyublog11 小时前
HDFS 上传文件名空格问题排障教程
前端·javascript·npm
lengxuenong11 小时前
区间覆盖问题 · 简明学习手册1
java·学习·算法
?abc!11 小时前
(贪心)621. 任务调度器
java·前端·c#
摸鱼仙人~11 小时前
校招帮简历字段匹配架构分析报告
java·前端·架构
悟道书生12 小时前
若依 RBAC 权限控制学习笔记
java·网络·笔记·sql·学习·vue
陈随易12 小时前
副业搞钱点子之赛事与活动
前端·后端·程序员
电梯界知识分子12 小时前
景德镇老房重新设计阶段规划楼梯与电梯,1.7m×1.6m空间装400kg观光电梯,棕色框架茶色玻璃适配中式装修
大数据·服务器·前端·网络·家用电梯
Shell运维手记12 小时前
Shell 脚本入门课堂讲解
前端·chrome