首页 > 其他分享 >vue3中的watch与vue2中的watch的对比

vue3中的watch与vue2中的watch的对比

时间:2023-07-27 15:35:15浏览次数:48  
标签:name setup watch value vue2 vue3 ref 监听

新版的 watch 和旧版对比,在使用方式上变化非常大!旧版是这样用的,和 data 、 methods 都在同级配置:

// 旧版的写法:
复制代码
export default {
  watch: {
    // ...
  },
  data () {
    return {
      // ...
    }
  },
  methods: {
    // ...
  }
}
复制代码

 


新版的 
watch
 需要在 
setup
 里使用,在使用之前,还需要先导入该组件。
watch
setup
复制代码
import { defineComponent, ref, watch } from 'vue'

export default defineComponent({
  setup () {
    const name = ref<string>('Petter');

    // 2s后改变数据
    setTimeout(() => {
      name.value = 'Tom';
    }, 2000);

    // 你可以监听一个响应式对象
    watch( name, () => {
      console.log('监听整个 ref ', name.value);
    })

    // 也可以监听对象里面的某个值(此时需要写成 getter 函数)
    watch( () => name.value, () => {
      console.log('只监听 value ', name.value);
    })
  }
})
复制代码

需要注意的是,你只能监听响应式数据,如果通过 let 定义一个普通的字符串变量,然后去改变字符串内容,这样是无法监听的。

另外,默认情况下,watch 是惰性的,即只有当被侦听的源发生变化时才执行回调。

TIP

vue3中的watch 默认是深度监听,无需再手动指定 deep 。

另外, watch 可以接受两个参数:

 

参数类型作用
newVal any 变化后的新值
oldVal any 变化前的旧值


这里返回的参数类型并没有特定限制,取决于你监听的数据类型变化。

复制代码
export default defineComponent({
  setup () {
    const name = ref<string>('Petter');

    // 2s后改变数据
    setTimeout(() => {
      name.value = 'Tom';
    }, 2000);

    // 你可以监听一个响应式对象
    watch( name, (newVal, oldVal) => {
      console.log('打印变化前后的值', { oldVal, newVal });
    })

    return {
      name
    }
  }
})
   

标签:name,setup,watch,value,vue2,vue3,ref,监听
From: https://www.cnblogs.com/bamboopanders/p/17585085.html

相关文章

  • vue2.x接入mockJs
    1、安装npminstallmockjs2、创建文件src/mock/api、src/mock/indeximportMockfrom'mockjs'importMockApifrom"./api"Mock.setup({timeout:"300",});constmocks=[...MockApi];exportfunctionmockXHR(){for(letiofmocks)......
  • Vue2的/deep/深度选择器失效了?
    /deep/在Vue2样式中的问题。太长不看:不要在VueSFC以外的地方使用/deep/。对于Vue3,请使用最新的:deep()伪类选择器。什么是/deep//deep/是Vue2中一个重要的样式选择器,可以用于选择封装好的组件内部的样式。如果直接在Vue组件上设置class属性,该属性只附加于子......
  • 用CSS样式 @keyframes、animation写一个旋转立体模型、动画模型,vue2
    需求:画一个正方体,让物体一直旋转环境:vue2、css效果:代码:模型1<template>2<div>3<!--旋转立体图-->4<divclass="cube">5<divclass="facefront"></div>6<divclass="faceba......
  • software breakpoint、hardware breakpoint、watchpoint
    参考:08调试利器GDB(下)https://www.cnblogs.com/lh03061238/p/13177510.html使用GDB进行断点调试  https://www.cnblogs.com/-glb/p/12514577.htmlbreakpoint和watchpoint的区别 https://www.jianshu.com/p/9462a5280004Aboutbreakpointsandwatchpoints  https://www.c......
  • Vue3 组件篇
    组件命名组件的命名一般分为两种在单文件组件中,推荐为子组件使用PascalCase的标签名,以此来和原生的HTML元素作区分。虽然原生HTML标签名是不区分大小写的,但Vue单文件组件是可以在编译中区分大小写的。我们也可以使用/>来关闭一个标签。使用kebab-case形式并显式地......
  • vue3之element-plus
    1.安装elementPlus和自动导入插件npmielementPlusnpminstall-Dunplugin-vue-componentsunplugin-auto-import2、配置自动按需导入//引入插件importAutoImportfrom'unplugin-auto-import/vite'importComponentsfrom'unplugin-vue-components/vite'import{......
  • 使用脚手架环境开发vue2项目
    一、检查node版本(1)有node.js(2)没有node.js安装地址:Node.js 二、使用npm,包管理工具,是node包管理和分发工具【需要配置仓库镜像地址,改为中国仓库镜像地址】1、查看当前镜像:npmgetregistry2、设置镜像地址的命令: 设置最新的国内淘宝镜像地址......
  • Vue3.0 页面跳转的几种方式
     首先引入import{useRouter}from"vue-router";使用router接收useRouterconstrouter=useRouter(); 1. router.push我们最常用的router.push方法会将新的路由添加到历史记录中,同时会导航到该路由页面,当用户点击浏览器后退按钮时,则回到之前的URL。//保留......
  • Vue3组件二次封装
    naive-ui的n-input举例<template><n-inputclearableplaceholder=""v-bind="$attrs"><templatev-for="(value,name)in$slots"#[name]="slotData">......
  • vue2-ace-editor基础配置
    简介Ace是一个用JavaScript编写的可嵌入代码编辑器。它与Sublime、Vim和TextMate等原生编辑器的功能和性能相匹配。它可以很容易地嵌入到任何网页和JavaScript应用程序中。Ace被维护为Cloud9IDE的主要编辑器,并且是MozillaSkywriter(Bespin)项目的继承者。快速开始......