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>
相关推荐
向量引擎10 分钟前
从零起步,如何打造专属向量引擎 API 中转工作流?
java·服务器·前端
辰海Coding14 分钟前
MiniSpring框架学习-分解 Dispatcher
java·学习·spring·架构
初夏睡觉15 分钟前
数据结构学习之~二叉堆 (P3378 【模版】堆)
数据结构·c++·学习
IT_陈寒38 分钟前
Vue这个动态响应坑把我整不会了
前端·人工智能·后端
bestlanzi1 小时前
使用nvm管理node环境
前端·vue.js·npm
z200509301 小时前
【Linux学习】Linux中的进程程序替换
linux·服务器·学习
SomeOtherTime1 小时前
Geojson相关(AI回答)
java·前端·python
小+不通文墨1 小时前
把树莓派外接的DHT11接收的温湿度发送到emqx上
经验分享·笔记·嵌入式硬件·学习·树莓派
bush41 小时前
嵌入式linux学习记录四
linux·运维·学习