gpt4 book ai didi

vue.js watch经常失效的场景与解决方案

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章vue.js watch经常失效的场景与解决方案由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

使用过watch的,应该起码经历过一次失效.

比如,我们监听对象的时候,在没有踩坑之前,很容易这样写:

vue.js watch经常失效的场景与解决方案

但是,X,这里的watch是无效的!!.

因为 obj 是引用类型!!! 。

引用类型的指针是固定的,所以如果不是重新赋值,那么其赋值的变量自然也不会发生变化.

举个例子:

let obj = { a: 1 };let obj1 = obj;let obj2 = { ...obj };obj1.a = 2;obj2.a = 3;// 这里肯定是true,因为obj和obj1都是同一个指针,不明白的搜下引用类型console.log(obj1 === obj);// 这里肯定是false,因为指针不同console.log(obj2 === obj);

怎么解决呢?也简单! 。

设置deep:true,这样obj中的属性发生变化(可被监测到的),便会执行 handler 函数;.

vue.js watch经常失效的场景与解决方案

!!!注意,因为是引用类型,所以newValue 和oldValue始终相等,千万不要犯傻的写相等就return,那就永远也不往下走了。。。.

监测数组

引用类型,除了对象,很容易想到数组,那数组是不是也需要这样写呢。 话分两头:

  • 数组项是对象类型,就需要deep
  • 数组项是值类型,就不需要deep

因为vue2里,数组被特殊处理了,跟 obj 不等同,所以需要分情况.

也就是数组项是值类型的话,直接这么写就行:

vue.js watch经常失效的场景与解决方案

对象类型的话,上面是不行的,先举个错误 ❌ 的例子:

vue.js watch经常失效的场景与解决方案

不打印的原理,依然是数组项是对象类型,想watch对象类型,必须加deep 。

正确做法 ✅:

watch:{ arr: { handler(newValue) {  // 这里就可以打印了  console.log(newValue); }, deep: true },}

总结

watch失效的场景:

  • 对象类型
  • 数组项为对象类型的数组

解决方案:加deep:true.

watch的其他属性

官网文档 。

  • 一开始就需要执行watch的话,可 immediate属性
  • handle可以是一个数组
  • 取消watch的话,this.$unwatch
  • watch对象的某个属性的话,"obj.key"(){}
  • 如果想同时检测两个属性,懒得一个个写的话,有个偷懒的法子用computed做中间层。
computed:{ fullName(){return this.firstName + this.lastName}},watch:{ fullName(){...}}

引用

watch的用法 。

总结

到此这篇关于vue.js watch经常失效的场景与解决方案的文章就介绍到这了,更多相关vue.js watch失效的场景与解决内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。

原文链接:https://juejin.cn/post/6914593379695198222 。

最后此篇关于vue.js watch经常失效的场景与解决方案的文章就讲到这里了,如果你想了解更多关于vue.js watch经常失效的场景与解决方案的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com