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>
相关推荐
风止何安啊1 分钟前
收到字节的短信:Trae SOLO上线了?尝尝鲜,浅浅做个音乐播放器
前端·html·trae
二川bro3 分钟前
多模态AI开发:Python实现跨模态学习
人工智能·python·学习
抱琴_8 分钟前
大屏性能优化终极方案:请求合并+智能缓存双剑合璧
前端·javascript
用户463989754329 分钟前
Harmony os——长时任务(Continuous Task,ArkTS)
前端
fruge9 分钟前
低版本浏览器兼容方案:IE11 适配 ES6 语法与 CSS 新特性
前端·css·es6
石像鬼₧魂石22 分钟前
Netcat,网络瑞士军刀(新手学习备用)
学习
颜酱27 分钟前
开发工具链-构建、测试、代码质量校验常用包的比较
前端·javascript·node.js
颜酱1 小时前
package.json 配置指南
前端·javascript·node.js
todoitbo1 小时前
基于 DevUI MateChat 搭建前端编程学习智能助手:从痛点到解决方案
前端·学习·ai·状态模式·devui·matechat
oden1 小时前
SEO听不懂?看完这篇你明天就能优化网站了
前端