Vue中computed和watch的使用总结

3 篇文章 0 订阅

#Vue中computed和watch的使用总结

  • computed
    计算属性 有缓存作用,简化tempalte里面{{}}的计算, 只要没有变化就不会再次执行, 大多数情况下更适用
	  <div> message: "{{ reversedMessage }}"</div>
	 data() {
		message: 'Hello' 
	 },
	 computed: {  
	    //第一种
		reversedMessage: function () { 默认 getter
		  return this.message.split('').reverse().join('')
		},
		//第二种
		reversedMessage: {
			//getter
			get:function(){
			  return this.message.split('').reverse().join('')
			}
			//setter
			set:function(newVal){
				this.message = newVal + 'world'
			}
		}
	 }
  • watch
    侦听器 适用于监听props,$emit或本组件的值 执行异步操作
    监听简单的数据
 <div> name: "{{ message }}"</div>
          props: {
		    name: {
		      type: String,
		      default: ''
		    }
          },
		 data() {
			 titleName: this.name   // 重新接收赋值数据
		 },
		 computed: {  
			message : function () {		
				 1. 情况一:
				  return this.name //  直接监听props里的names数据
                 2. 情况二:
                  return this.titleName // 监听titleName数据的变化
			}
		 },
		 watch: {  //在组件中获取父组件传过来的值
		     name(newVal, oldVal) { // watch监听props里name的变化,然后执行操作
                 console.log(newVal)
                 this.titleName = newVal
             }
		 }

监听复杂的数据
可以使用深度监听deep,但性能开销有点大,可以用另外方法

. 直接监听单个属性

  data(){
      return{
         user:{
           name:'',
           age: 0
         }
       }
   },
   方法一:
   watch:{
      'user.name':function(newVal,oldVal){
        console.log(newVal);
      }
    },
   方法二:
    computed:{
      nameChange(){ // 作为中间桥梁作用
        return this.user.name
      }
    },
    watch:{
      nameChange(newVal, oldVal){
        console.log(newVal)
      }
    },

重点:
为了避免直接修改父组件传入的值
简单的数据可以用一个data变量来接收
而对于复杂的数据可以深拷贝一份数据出来

 1.数组深拷贝可以用 for循环
 2.对象用for.. in..
 3.函数直接赋值 = 
 具体用法看前面分享的  [js常用循环遍历方法总结篇](https://blog.csdn.net/qq_46346301/article/details/105682635)

 JSON.parse(JSON.stringify(obj/array)) 深拷贝 可以在父组件向子组件传值时使用
 比较两个对象是否相等可以用 
 let obj1 = JSON.stringify(obj1)
 let obj2 = JSON.stringify(obj2)

仅供参考, 未完待续。。。

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值