欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

computed相关内容

程序员文章站 2022-04-25 11:37:39
...
  <div id ="app"> 
   		   {{  getFullName()  }}
    				  {{msg}}
   </div>
   <script src="node_modules/vue/dist/vue.js"> </script>
   <script> 
    let vm = new Vue({
                  data:{ 
                        firstName:'陈' ,
                        lastName:'邱' ,
                        msg:'abc'

                          },
            methods:{
                      getFullName(){
                        console.log('更新了')
                        return this.firstName + this.lastName   
                                   }      
                    }
                    }).$mount('#app');
	            </script>

上述方法,在检查代码时, vm.firstName=" " 一个新值的时候,会触发console.log
但是在vm.msg=" " 一个新值的时候 也会触发console.log 重新执行 浪费性能

于是为了节省性能,我们可以单独加入一个computer 存放通过属性计算的内容。

              <div id ="app"> 
  			    {{ FullName  }}
    			  {{msg}}
    		  </div>
  			 <script src="node_modules/vue/dist/vue.js"> </script>
		    <script> 
		 let vm = new Vue({
             		     data:{ 
                         firstName:'陈' ,
                         lastName:'邱' ,
                         msg:'abc'
                          },
                 computed:{  //Object.defineProperty来实现
                            fullName(){   //类似于get方法,有缓存,如果本次不计算 则取上一次的值。
                         	     console.log('更新了')
                                 return this.firstName + this.lastName 
                               //好处:它的依赖值不变就不会重新执行方法 只有first/lastName变了才变化
                          			  }
                 		   },
                        }).$mount('#app');
				 </script>

以上的方法使用computed方法 在修改vm.first/lastName=" " 新值时 触发 ‘更新了’ 。
在修改vm.msg=” "新值时 不触发‘更新了’ 节省了性能避免没必要的执行。

与此同时comptued也可以使用watch方法代替 代码如下

		   <div id ="app"> 
  			    {{ fullName  }}
    			  {{msg}}
    	   </div>
  			 <script src="node_modules/vue/dist/vue.js"> </script>
		    <script> 
		 let vm = new Vue({
             	   data:{ 
                        firstName:'陈' ,
                        lastName:'邱' ,
                        msg:'abc',
                        fullName:' '
                          }, 
                      mounted(){  		            //在不同阶段会被调用  钩子函数
                  		   this.getFullName();       //加了mounted函数 第一次会渲染出现 没有mounted函数则vm修改值后才渲染出现
                               },
                      methods:{
                      	   getFullName(){
                      	   			     this.fullName = this.firstName + this.lastName
                      	   			     }
                      	   	 },
                      watch:{        //vm.$watch  只要有新数据变化了 就会触发回调
                    	   firstName(newValue){
                    	   					 this.getFullName();
                    	                     },
                    	   lastName(){
               			                     this.getFullName();
                          			  }
                 		   },
                        }).$mount('#app');
				 </script>

watch也可以变成一个对象类型 功能和上面这个相同 代码如下

 <div id ="app"> 
  			    {{ fullName  }}
    			  {{msg}}
    	   </div>
  			 <script src="node_modules/vue/dist/vue.js"> </script>
		    <script> 
		 let vm = new Vue({
             	   data:{ 
                        firstName:'陈' ,
                        lastName:'邱' ,
                        msg:'abc',
                        fullName:' '
                          }, 
                      mounted(){  		            
                  		   this.getFullName();       
                               },
                      methods:{
                      	   getFullName(){
                      	   			     this.fullName = this.firstName + this.lastName
                      	   			     }
                      	   	 },
                      watch:{        
                    	   firstName:{
                    	   				handler(newValue){
                    	   				this.getFullName();
                    	   			 }
                    	                     },
                    	   lastName(){
               			               this.getFullName();
                          			  }
                 		   },
                        }).$mount('#app');
				 </script>

computed和watch都能实现我们想要的逻辑,那他们有什么区别呢?
watch可以支持异步,computed只能同步。(watch)可以支持小功能,但是一般优先考虑能否使用computed方法计算属性,因为watch代码量比较大。
比如:当我们需要延迟渲染时 会修改watch部分的代码 computed不行 代码如下

	 watch:{        //vm.$watch  只要有新数据变化了 就会触发回调
     firstName(newValue){
               		   setTimeout(()=>{
                       this.getFullName();
                        },1000)     //延迟1秒渲染
                                      },
                   lastName(){
                    this.getFullName();
                              }
                     }
              }).$mount('#app');

computed和method 又有什么区别呢?
区别: computed有缓存 method没缓存

上一篇: Docker相关内容

下一篇: xml相关内容