iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Vue3中watch的用法是什么
  • 264
分享到

Vue3中watch的用法是什么

2023-06-20 14:06:12 264人浏览 泡泡鱼
摘要

本篇内容主要讲解“vue3中watch的用法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue3中watch的用法是什么”吧!目录前言?一、api介绍二、监听多个数据源三、侦听数组四、侦

本篇内容主要讲解“vue3中watch的用法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习Vue3中watch的用法是什么”吧!

目录
  • 前言?

  • 一、api介绍

  • 二、监听多个数据源

  • 三、侦听数组

  • 四、侦听对象

  • 五、总结

前言?

本文以实验的形式,为大家揭示Vue3中watch的最佳实践。

这篇文章的主要目的是研究watch在监听响应式数据时,如何获取当前值和先前值。顺便给大家补习一下watch的用法,然后引出为了配合watch能获取当前值和先前值,如何选用ref和Reactive定义响应式数据。

一、API介绍

watch(WatcherSource, Callback, [WatchOptions])type WatcherSource<T> = Ref<T> | (() => T)interface WatchOptions extends WatchEffectOptions {    deep?: boolean // 默认:false  immediate?: boolean // 默认:false  }

参数说明:

WatcherSource: 用于指定要侦听的响应式变量。WatcherSource可传入ref响应式数据,reactive响应式对象要写成函数的形式。

Callback: 执行的回调函数,可依次接收当前值newValue,先前值oldValue作为入参。

WatchOptions:支持 deep、immediate。当需要对响应式对象进行深度监听时,设置deep: true;默认情况下watch是惰性的,当我们设置immediate: true时,watch会在初始化时立即执行回调函数。

除此之外,vue3的watch还支持侦听多个响应式数据,也能手动停止watch监听。

二、监听多个数据源

<template>  <div class="watch-test">    <div>name:{{name}}</div>    <div>age:{{age}}</div>  </div>  <div>    <button @click="changeName">改变名字</button>    <button @click="changeAge">改变年龄</button>  </div></template><script>  import {ref, watch} from 'vue'  export default {    name: 'Home',    setup() {      const name = ref('小松菜奈')      const age = ref(25)      const watchFunc = watch([name, age], ([name, age], [prevName, prevAge]) => {        console.log('newName', name, 'oldName', prevName)        console.log('newAge', age, 'oldAge', prevAge)        if (age > 26) {          watchFunc() // 停止监听        }      },{immediate:true})      const changeName = () => {        name.value = '有村架纯'      }      const changeAge = () => {        age.value += 2      }      return {        name,        age,        changeName,        changeAge      }    }  }</script>

Vue3中watch的用法是什么

现象:当改变名字和年龄时,watch都监听到了数据的变化。当age大于26时,我们停止了监听,此时再改变年龄,由于watch的停止,导致watch的回调函数失效。

结论:我们可以通过watch侦听多个值的变化,也可以利用给watch函数取名字,然后通过执行名字()函数来停止侦听。

三、侦听数组

<template>  <div class="watch-test">    <div>ref定义数组:{{arrayRef}}</div>    <div>reactive定义数组:{{arrayReactive}}</div>  </div>  <div>    <button @click="changeArrayRef">改变ref定义数组第一项</button>    <button @click="changeArrayReactive">改变reactive定义数组第一项</button>  </div></template><script>  import {ref, reactive, watch} from 'vue'  export default {    name: 'WatchTest',    setup() {      const arrayRef = ref([1, 2, 3, 4])      const arrayReactive = reactive([1, 2, 3, 4])      //ref not deep      const arrayRefWatch = watch(arrayRef, (newValue, oldValue) => {        console.log('newArrayRefWatch', newValue, 'oldArrayRefWatch', oldValue)      })      //ref deep      const arrayRefDeepWatch = watch(arrayRef, (newValue, oldValue) => {        console.log('newArrayRefDeepWatch', newValue, 'oldArrayRefDeepWatch', oldValue)      }, {deep: true})      //reactive,源不是函数      const arrayReactiveWatch = watch(arrayReactive, (newValue, oldValue) => {        console.log('newArrayReactiveWatch', newValue, 'oldArrayReactiveWatch', oldValue)      })      // 数组监听的最佳实践- reactive且源采用函数式返回,返回拷贝后的数据      const arrayReactiveFuncWatch = watch(() => [...arrayReactive], (newValue, oldValue) => {        console.log('newArrayReactiveFuncWatch', newValue, 'oldArrayReactiveFuncWatch', oldValue)      })      const changeArrayRef = () => {        arrayRef.value[0] = 6      }      const changeArrayReactive = () => {        arrayReactive[0] = 6      }      return {        arrayRef,        arrayReactive,        changeArrayRef,        changeArrayReactive      }    }  }</script>

Vue3中watch的用法是什么

现象:当将数组定义为响应式数据ref时,如果不加上deep:true,watch是监听不到值的变化的;而加上deep:true,watch可以检测到数据的变化,但老值和新值一样,即不能获取老值。当数组定义为响应式对象时,不作任何处理,watch可以检测到数据的变化,但老值和新值一样;如果把watch的数据源写成函数的形式并通过扩展运算符克隆一份数组返回,就可以在监听的同时获得新值和老值。

结论:定义数组时,最好把数据定义成响应式对象reactive,这样watch监听时,只需要把数据源写成函数的形式并通过扩展运算符克隆一份数组返回,即可在监听的同时获得新值和老值。

四、侦听对象

<template>  <div class="watch-test">    <div>user:{</div>      <div>name:{{objReactive.user.name}}</div>      <div>age:{{objReactive.user.age}}</div>    <div>}</div>    <div>brand:{{objReactive.brand}}</div>    <div>      <button @click="changeAge">改变年龄</button>    </div>  </div></template><script>  import {ref, reactive, watch} from 'vue'  import _ from 'lodash';  export default {    name: 'WatchTest',    setup() {      const objReactive = reactive({user: {name: '小松菜奈', age: '20'}, brand: 'Channel'})      //reactive 源是函数      const objReactiveWatch = watch(() => objReactive, (newValue, oldValue) => {        console.log('objReactiveWatch')        console.log('new:',JSON.stringify(newValue))        console.log('old:',jsON.stringify(oldValue))      })      //reactive,源是函数,deep:true      const objReactiveDeepWatch = watch(() => objReactive, (newValue, oldValue) => {        console.log('objReactiveDeepWatch')        console.log('new:',JSON.stringify(newValue))        console.log('old:',JSON.stringify(oldValue))      }, {deep: true})      // 对象深度监听的最佳实践- reactive且源采用函数式返回,返回深拷贝后的数据      const objReactiveCloneDeepWatch = watch(() => _.cloneDeep(objReactive), (newValue, oldValue) => {        console.log('objReactiveCloneDeepWatch')        console.log('new:',JSON.stringify(newValue))        console.log('old:',JSON.stringify(oldValue))      })      const changeAge = () => {        objReactive.user.age = 26      }      return {        objReactive,        changeAge      }    }  }</script>

Vue3中watch的用法是什么

现象:当把对象定义为响应式对象reactive时,采用函数形式的返回,如果不加上deep:true,watch是监听不到值的变化的;而加上deep:true,watch可以检测到数据的变化,但老值和新值一样,即不能获取老值;若把watch的数据源写成函数的形式并通过深拷贝克隆(这里用了lodash库的深拷贝)一份对象返回,就可以在监听的同时获得新值和老值。

结论:定义对象时,最好把数据定义成响应式对象reactive,这样watch监听时,只需要把数据源写成函数的形式并通过深拷贝克隆一份对象返回,即可在监听的同时获得新值和老值。

五、总结✨

通常我们把原始类型的数据(number、string等)定义为ref响应数据,引用类型的数据(数组、对象)定义为reactive响应式数据;

当我们使用watch监听数据变化需要同时获取新值和老值时,我们需要把数据源定义为函数的形式,并且把数据源进行深拷贝返回。当我们只需要新值时,可以增加deep:true选项即可。
其实,引用类型的数据定义为ref形式也没关系,也只需要把数据源定义为函数的形式,并且把数据源进行深拷贝返回,便可获得新老值~哈哈哈哈哈哈哈哈哈哈哈哈哈哈,但我觉得最佳实践还是要把引用类型定义为reactive响应式数据。

到此,相信大家对“Vue3中watch的用法是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: Vue3中watch的用法是什么

本文链接: https://www.lsjlt.com/news/297173.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue3中watch的用法是什么
    本篇内容主要讲解“Vue3中watch的用法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue3中watch的用法是什么”吧!目录前言一、API介绍二、监听多个数据源三、侦听数组四、侦听...
    99+
    2023-06-20
  • vue3中watch和watchEffect是什么
    小编给大家分享一下vue3中watch和watchEffect是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!watch结论1:watch需要侦听特定的数据源...
    99+
    2023-06-29
  • Vue3中watch的最佳用法
    目录一、watch的基本实例二、watch监听多个数据getter 函数:多个来源组成的数组三、watch监听对象的值四、watch监听器的配置参数1.deep2.immediate...
    99+
    2023-05-14
    Vue3中watch的用法 Vue3中watch用法 Vue中watch的使用
  • vue3中watch和watchEffect的新用法
    目录一、watch新用法1.1、watch使用语法1.2、watch监听多个属性值1.3、watch监听引用数据类型二、watchEffect三、watch与watchEffect区...
    99+
    2022-11-12
  • vue3的watch用法以及和vue2中watch的区别
    目录watch介绍Vue2 用法监听基础变量监听对象Vue3的用法监听基础类型监听复杂类型组合监听Vue 2 Vue3 小区别computed和watch的区别总结watch介绍 w...
    99+
    2023-05-16
    vue3的watch Vue2的watch vue2 vue3 watch区别
  • Vue3中的watch怎么使用
    这篇文章主要介绍“Vue3中的watch怎么使用”,在日常操作中,相信很多人在Vue3中的watch怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue3中的watch怎么使用”的疑惑有所帮助!接下来...
    99+
    2023-07-05
  • VUE3中watch和watchEffect的用法详解
    watch和watchEffect都是监听器,但在写法和使用上有所区别。 watch在监听 ref 类型时和监听reactive类型时watch函数的写发有所不一样。watch在监听...
    99+
    2022-11-13
  • Vue3中的 computed,watch,watchEffect的使用方法
    目录一、computed二、watchvu2 的写法Vue3 中这样写三、watchEffect一、computed <template> 姓:<input ...
    99+
    2022-11-13
  • vue3中的watch()的用法和具体作用
    目录一、Vue3中watch()的用法二、Vue3中watch()的作用三、Vue3中新引入的监听方法watchEffect四、总结Vue.js 3是一款流行的JavaScript框...
    99+
    2023-05-17
    vue3 watch()方法 vue3 watch()用法 vue watch()
  • vue3中的watch和watchEffect怎么用
    本篇内容介绍了“vue3中的watch和watchEffect怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!首先总结一下两者的区别:w...
    99+
    2023-06-30
  • Vue3中的computed,watch,watchEffect怎么使用
    这篇“Vue3中的computed,watch,watchEffect怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“...
    99+
    2023-07-06
  • vue3中的watch和computed怎么使用
    2.监听 ref 数据2.1监听一个 ref 数据<template> <p>{{ age }}</p> <button @click="age++">click&...
    99+
    2023-05-21
    Vue3 watch computed
  • Vue3中watch的使用详解
    目录Vue3中watch的详解Vue2使用watchVue3使用watch情况1情况2情况3情况4情况5特殊情况Vue3中watch的详解 Vue2使用watch <templ...
    99+
    2022-11-16
    Vue3 watch Vue3 中的watch Vue watch详解
  • Vue.js中$watch方法的作用是什么
    Vue.js中$watch方法的作用是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。// 键路径 vm.$watch('...
    99+
    2022-10-19
  • vue3下watch的使用方法示例
    目录一,监听单个数据ref二,监听引用类型数据ref:深度监听1,引用类型ref直接深度监听2,引用类型ref深拷贝深度监听三,监听单个数据:reactive四,监听引用类型数据:r...
    99+
    2023-03-19
    vue3 watch使用 vue3 watch
  • vue3下的watch怎么使用
    对于WatchOptions的参数配置:deep:当需要对对象等引用类型数据进行深度监听时,设置deep: true,默认值是false。immediate:默认情况下watch是惰性的,设置immediate: true时,watch会在...
    99+
    2023-05-17
    Vue3 watch
  • Vue3中watch无法监听的解决办法
    下面的代码在对ref实例赋值完之后。既:test.value = { name: 1 },会发现不执行watch里面的回调函数了,这是为什么呢? <!DOCTYPE html&...
    99+
    2023-05-19
    Vue3 watch无法监听 Vue3 watch 监听
  • vue3中watch和watchEffect怎么使用
    这篇文章主要讲解了“vue3中watch和watchEffect怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue3中watch和watchEffect怎么使用”吧!一、watch...
    99+
    2023-06-21
  • Vue3中watch的用法与最佳实践指南
    目录前言🌟一、API介绍二、监听多个数据源三、侦听数组四、侦听对象五、总结✨前言🌟 本文以实验的形式,为大家揭示Vue3中watch的...
    99+
    2022-11-12
  • VUE3中watch监听使用的方法有哪些
    这篇文章主要介绍“VUE3中watch监听使用的方法有哪些”,在日常操作中,相信很多人在VUE3中watch监听使用的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”VUE3中watch监听使用的方法...
    99+
    2023-07-01
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作