Vue3学习——computed、watch、watchEffect

computed

  • 与Vue2.x中computed配置功能一致
  • 写法
import {
   computed} from 'vue'

setup(){
   
  ...
  //计算属性——简写
    let fullName = computed(()=>{
   
      return person.firstName + '-' + person.lastName
    })

    //计算属性——完整
    let fullName = computed({
   
      get()
        return person.firstName + '-' + person.lastName
      },

      set(value){
   
        const nameArr = value.split('-')
        person.firstName = nameArr[0]
        person.lastName = nameArr[1]
      }
    })
}

watch

  • 注意
    • 监视reactive定义的响应式数据时:oldValue无法正确获取、强制开启了深度监视(deep配置失效)。
    • 监视reactive定义的响应式数据中的某个属性时:deep配置有效。
情况一:监视ref定义的响应式数据
  • 监视ref定义的对象,改变某一个属性时,newValue和oldValue是同一个值;
  • 若改变整个对象newValue和oldValue不一样;
	 watch(sum, (newValue, oldValue) => {
   
	   console.log('sum变化了', newValue, oldValue)
	 }, {
   immediate: true})

情况二:监视多个ref定义的响应式数据(写成数组格式)

	watch([sum, msg], (newValue, oldValue) => {
   
	   console.log('sum或msg变化了', newValue, oldValue)
	 })

情况三:监视reactive定义的响应式数据,deep默认开启,且关不掉

	 watch(person, (newValue, oldValue) => {
   
 	     console.log('person变化了', newValue, oldValue)
  	  }, {
   immediate: true, deep: false}) //此处的deep配置不再奏效

情况四:监视reactive定义的响应式数据中某个属性

  • 可以监视整体改变,也可以监视某个属性改变
  • 监视的属性不是【对象类型】,需写成函数
  • 监视的属性是【对象类型】,可直接编,也可使用函数,推荐使用函数并添加deep属性
    (因为直接写person,无法监听到整个对象的改变;deep是为了深层监听)
    watch(() => person.job, (newValue, oldValue) => {
   
      console.log('person的job变化了', newValue, oldValue)
    }, {
   immediate: true, deep: true})

情况五:监视reactive定义的响应式数据中某些属性

    watch([() => person.job, () => person.name], (newValue, oldValue) => {
   
      console.log('person的job变化了', newValue, oldValue)
    }, {
   immediate: true, deep: true})

特殊情况

    watch(() => person.job, (newValue, oldValue) => {
   
      console.log('person的job变化了', newValue, oldValue)
    }, {
   deep: true}) //此处由于监视的是reactive素定义的对象中的某个属性,所以deep配置有效

停止监视

    const stopWatch =  watch(sum, (newValue, oldValue) => {
   
      console.log('sum变化了', newValue, oldValue)
      if (sum > 10) {
   
        stopWatch() // 停止监视
      }
    })

watchEffect

  • watch的套路:既要指明监视的属性,也要指明监视的回调。

  • watchEffect的套路:不用指明监视的哪个属性,监视的回调中用到哪个属性,那就监视哪个属性。

  • watchEffect有点像computed:

  • 但computed注重的计算出来的值(回调函数的返回值),所以必须要写返回值。而watchEffect更注重的是过程(回调函数的函数体),所以不用写返回值。


// watchEffect所指定的回调中用到的数据只要发生变化,则直接重新执行回调。初始化也会执行一次

watchEffect(()=>{
   
    const x1 = sum.value
    const x2 = person.age
    console.log('watchEffect配置的回调执行了')
})

相关推荐

  1. vue3 学习

    2024-02-20 12:10:02       49 阅读
  2. vue3版本学习

    2024-02-20 12:10:02       47 阅读
  3. vue3学习网站

    2024-02-20 12:10:02       63 阅读
  4. vue3学习记录

    2024-02-20 12:10:02       54 阅读
  5. Vue3学习——hooks

    2024-02-20 12:10:02       54 阅读
  6. vue3学习笔记

    2024-02-20 12:10:02       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-20 12:10:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-20 12:10:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-20 12:10:02       82 阅读
  4. Python语言-面向对象

    2024-02-20 12:10:02       91 阅读

热门阅读

  1. Kotlin函数和对象

    2024-02-20 12:10:02       54 阅读
  2. Sql Server 存储过程

    2024-02-20 12:10:02       37 阅读
  3. 小程序API能力集成指南——路由API汇总

    2024-02-20 12:10:02       53 阅读
  4. 什么是MVVM?MVC、MVP与MVVM模式的区别?

    2024-02-20 12:10:02       47 阅读
  5. Python自动化测试:unittest与pytest框架

    2024-02-20 12:10:02       46 阅读
  6. kali入门

    2024-02-20 12:10:02       62 阅读
  7. LPC/LSP/LSF辨析

    2024-02-20 12:10:02       60 阅读
  8. MongoDB语言命令

    2024-02-20 12:10:02       40 阅读
  9. Got socket error trying to find package flutter_svg

    2024-02-20 12:10:02       49 阅读
  10. pip源设置为国内源

    2024-02-20 12:10:02       50 阅读