Vue 3 迁移策略笔记—— 第29节:数组的监听

前言

本笔记主要基于官方文档《迁移策略——Watch on Arrays》汇总而来。如有理解出入,请以官方文档为主。建议您以官方文档为主,本文为辅。这样您可以“以自己为主”审视的阅读,从而不被我的观点带偏。

知识储备:

Vue api —— vm.$watch

概述

当侦听一个数组时,只有当数组被替换时才会触发回调。如果你需要在数组改变时触发回调,必须指定 deep 选项。

Vue 3.x 用法展示

在 Vue 3.x 当我们监听一个数组时,只有在数组被整体替换时才会触发回调。也就是说,如果我们只对数组进行增删改查操作时,是不会被 Vue 捕捉到的。如果想要在数组在发生改变时被 Vue 识别到,我们必须手动添加 deep 选项。如下:

watch: {
  bookList: {
    handler(val, oldVal) {
      console.log('book list changed')
    },
    deep: true
  },
}
Vue 2.x 的watch

其实,watch 的 deep 选项在 Vue 2.x 就有了。不过,在 Vue 2.x 只是用来处理对象的监听问题。设置 deep:true 后,Vue 就可以发现对象内部的数值变化。但是,在 Vue 2.x 中,监听数组并不需要这么做。

选项:deep

为了发现对象内部值的变化,可以在选项参数中指定 deep: true。注意监听数组的变更不需要这么做。

摘抄自——《Vue api —— vm.$watch

我们都知道 JS 的数组是一种特殊的对象。可能 Vue 3.x 的这次变动是为了统一 Vue 的在监听对象处理吧!


本系列目录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue.js 是一款流行的前端框架,它提供了一种数据绑定的机制,可以实时监测数据的变化并更新页面。在 Vue3 中,为了实现更高效的数据监听,引入了 Proxy 代理对象来替代 Vue2 中的 Object.defineProperty。 然而,有时候在使用 Vue3 时,我们会遇到数组监听失效的情况。这可能是由于一些常见的原因导致的。 首先,Vue3 中的数组监听是通过 Proxy 对象实现的,而不是对数组的原型进行改写。这种改变带来了性能上的提升,但也可能导致一些细微的问题。比如,如果直接修改数组的索引或长度,而不是使用 Vue 提供的数组方法(如 push、pop 等),则监听可能会失效。 其次,由于 Vue3 使用 Proxy 对象进行监听,Proxy 对象只能监听对象的直接属性,而不能监听数组的索引。也就是说,如果直接修改数组的索引值,监听将不会触发。为了解决这个问题,我们需要使用特定的方法来修改数组,以确保监听正常工作。 最后,如果在数组中进行的操作过于频繁,可能会导致监听失效。频繁的更新操作可能会影响性能,甚至导致监听器无法及时捕捉到变化。这时我们可以考虑使用延迟处理或其他优化方法来避免这个问题。 综上所述,Vue3 数组监听有时候失效可能是由于直接修改数组的索引、长度或频繁的更新操作造成的。为了避免这个问题,我们应该正确使用 Vue 提供的数组方法来修改数组,并对频繁的更新操作进行优化,以确保监听器能够正常工作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值