关于vue3的watch监听reactive定义的响应式数组踩的坑

1.直接上踩坑前的代码

import type { ImgType } from '@/type'
import { reactive, watch } from 'vue'
// 收藏夹中的数据
export const useFavorites = reactive<Array<ImgType>>([])

watch(() => useFavorites, () => {
   console.log('useFavorites触发了更新')
})

/**
 * 更新收藏夹
 * @param type [STRING] 添加|删除
 * @param img 图片对象信息
 */
export const updateFavorites = (type: string, img: ImgType) => {
   if (type === 'add') {
      useFavorites.push(img)
   } else {
      useFavorites.forEach((item: ImgType, index: number) => {
         if (item.url === img.url) return useFavorites.splice(index, 1)
      })
   }
}

使用 watch 监听 useFavorites 值的变化时,却发现当修改了useFavorites 数组中的成员是,watch内的打印信息并没有触发。那么为什么呢?于是翻阅了vue的官方文档,发现 watch 默认不会触发深度监视。也就是说,如果你想监视嵌套数据的变化,需要设置 deep:true

2.添加深度监视配置项

watch(() => useFavorites, () => {
   // 书写触发更新后的统一罗辑
}, { deep: true })

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值