vue3.0的watch监听,如何使用?

需要用到watch监听的,直接看文章了。

1.监听一个ref的值,非常简单:

 const title = ref("")
 watch(title, (n, o) => {
      console.log("title改变了", n, o)
})

2.需要监听多个ref的值,写法多了点,逻辑是一样的。

log出来的是一个数组,取对应下标就行。

 const title = ref("")
 const age = ref(0)
 watch([title,age], (n, o) => {
      console.log("数据改变了", n, o)  //log [title,age] , [] 
})

3.监听一个数组,写法稍微有点不同。

  const arr = reactive([1, 2, 3, 4])
  arr.push(5)
  watch(() => [...arr], (n, o) => {
      console.log("数组变了", n, o)
    })

4.监听一个整个深度对象或者数组,也是需要用到deep的啦。

这里需要安装一个lodash(不安装使用直接监听,直接监听不需要带() =>,newValue和oldValue会一样。)
文档:https://lodash.com/
安装方式:$ npm i --save lodash ()

import _ from 'lodash'
 const state = reactive({
      title: "",
      attributes: {
        title: '123',
      }
    })
 watch(() => _.cloneDeep(state), (newValue, oldValue) => {
      console.log("reactive的title变了", n, o)
  }, { deep: true })

还有一种监听单个对象属性的

 const state = reactive({
      title: "",
      attributes: {
        title: '123',
      }
    })
 watch(() => state.attributes.title, (newValue, oldValue) => {
      console.log("reactive的title变了", n, o)
 })

5.使用新增的watchEffect

页面上定义

const count=ref(1)
watchEffect(() => { console.log(count.value) })

默认会执行一次,输出1.
之后的每一次count改变都会执行,只能监听ref,和reactive封装的对象。
定义一个stop变量后,效果是一样的,像这样

const stop = watchEffect(() => {
      let a = count.value;
      console.log(a)
})

需要停止的时候 ,可以判断停止监听:

const changeCount = () => {
      count.value++;
      if (count.value > 5) {
        stop()
      } else {
      
      }
}

重点来啦:
如果我们需要展示一个列表,当用户id改变的时候重新去请求数据的话,如果请求还没来得及响应,又改变了,这会使多次发起很多请求,对于性能是很不好的,所以我们可以在它改变多次的时候,只请求最后一次的响应成功的数据。

const stop = watchEffect((onInvalidate) => {
      let a = count.value;
      let time;
      let p = new Promise((resolve, reject) => {
        time = setTimeout(() => {
          axios.get("/api", {}).then(res => {
            resolve("timeout")
          })
        }, 1000);
      })
      p.then(res => {
        console.log(res);
      })
      onInvalidate(() => clearInterval(time))  //onInvalidate()函数,清除副作用.

    },{
      flush: 'post' 	//flush:'post' 就是等待当前组件dom更新后,再去触发watchEffect。
    })

再添一个

6.监听子组件接受到的值

  props: {
    count: {
      type: Number,
      default: 0
    },
  },
  setup (props) {
    let { count } = toRefs(props)   //使用toRefs变成可监听的ref值   count:ObjectRefImpl{}
    watch(count, (n, o) => {
      console.log(n, o)
    })
    onMounted(() => {
      console.log(count.value)
    })
    return {
    }
  },

好了,简洁的结尾,加油吧少年!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 3.0中,watch被重构以提供更灵活和强大的对象监听功能。 在Vue 3.0中,我们可以通过创建一个watcher实例来监听对象的变化。以下是使用watch监听对象的步骤: 首先,我们需要使用`watch`函数来定义一个watcher实例并指定需要监听的对象。例如: ``` const myObject = { firstName: 'John', lastName: 'Doe' } watch(myObject, (newValue, oldValue) => { console.log('Object changed:', newValue, oldValue) }) ``` 在这个例子中,我们创建了一个名为`myObject`的对象,并将其传递给`watch`函数。然后,我们传递了一个回调函数,每当对象发生变化时,这个回调函数就会被调用。回调函数的参数是新值和旧值。 然后,我们可以通过改变对象的属性来测试监听。例如,我们可以使用以下代码来修改`myObject`的`firstName`属性: ``` myObject.firstName = 'Jane' ``` 在控制台中,你将看到输出:`Object changed: { firstName: 'Jane', lastName: 'Doe' } { firstName: 'John', lastName: 'Doe' }`。这表明对象已经发生了变化,并且新值和旧值都被传递给了回调函数。 除了基本的对象监听外,Vue 3.0还提供了更高级的监听选项。例如,我们可以使用`deep`选项来深度监听对象的属性变化,或使用`immediate`选项来立即执行回调函数。 总之,Vue 3.0的watch提供了一种方便的方法来监听对象的变化,并在变化发生时执行特定的操作。无论是简单的对象还是复杂的嵌套对象,watch都能够准确地捕捉到其变化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值