【Vue3】watch 监视 reactive 定义的数据

发布于:2024-07-25 ⋅ 阅读:(160) ⋅ 点赞:(0)

【Vue3】watch 监视 reactive 定义的数据

背景

随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗的日子。本文内容并非完全原创,大多是参考其他文章资料整理所得,感谢每位技术人的开源精神。

简介

本文介绍 Vue3 中如何使用 watch 函数监视 reactive 定义的数据。

开发环境

分类 名称 版本
操作系统 Windows Windows 11
IDE Visual Studio Code 1.91.1

开发步骤及源码

1> 在 【Vue3】watch 监视 ref 定义的数据 基础上修改 Vue 根组件 App.vue 代码。

<template>
  <div class="person">
    <h1>监视 reactive 定义的数据</h1>
    <h2>姓名:{{ person.name }}</h2>
    <h2>年龄:{{ person.age }}</h2>
    <button @click="growUp">长大</button>
    <button @click="replace">换人</button>
  </div>
</template>

<script setup lang="ts" name="App">
import { reactive, watch } from 'vue'

const person = reactive({
  name: 'Harry Potter',
  age: 10,
})

function growUp() {
  person.age += 1
}

function replace() {
  Object.assign(person, {
    name: '赫敏·格兰杰',
    age: 11,
  })
}

// 监视
const stopWatch = watch(person, (newValue, oldValue) => {
  console.log('人员信息变更,从 %o 变成 %o', oldValue, newValue)
  if (newValue.age >= 18) {
    console.log('%s 成人了,可以不用再监护了', person.name)
    stopWatch()
  }
})
</script>

<style scoped></style>

2> 执行 npm run dev 命令启动应用,浏览器访问 http://localhost:5173/,点击页面中 长大换人 功能按钮,观察日志打印。
监视日志-reactive定义的数据

总结

  • 与监视 ref 定义的对象类型数据的区别:
    • 整体对象替换只能使用 Object.assign,不能直接使用赋值替换,否则会失去响应式;
    • 监视 reactive 定义数据默认开启深度监视,即使配置 deep: false 也无法关闭深度监视。

网站公告

今日签到

点亮在社区的每一天
去签到