组建中的data需要函数

本文探讨了Vue组件中为何需要将data定义为函数的原因,主要是为了确保每个组件实例拥有独立的数据空间,防止数据共享导致的连锁反应。通过示例说明了直接使用对象与使用data函数的区别,并提供了一个计数器组件的例子,强调了组件数据独立性的重要性。
摘要由CSDN通过智能技术生成

组件中的data函数

学习的时候,听说这里是一个面试点,记录一下自己的理解

大家都知道在Vue实例中的data,我们可以直接返回一个对象的值,而不需要把data封装成一个函数,为什么组件中就需要把data封装成一个函数呢?

我们写项目的时候,一般只写一个vue实例,这意味着我们在整个项目中都是在这一个vue实例中进行的,所以我们改变vue实例中data值的时候,其他地方也都会改变。而组件不一样,我们写一个组件,更想让他能得到复用,所以我们会写多个组件的实例,这时候,我们要保证每个数据都是一个独立的,而不是相互关联的,所以这里我们把data封装成一个函数来解除他们之间的相互牵扯

为什么用data函数返回一个对象(不能在外边写好的)能够解除他们之间的关联呢?
我们看下边的例子:

//这个例子会发生连锁反应,因为他们共用一个data
const obj={
     name:'lihua'
   }
   function a(){
     return obj;
   }
   var obj1=a()
   console.log(obj1)
   obj.name='xiaoming'
   var obj2=a()
   console.log(obj2)
   var c=a()
   console.log(c)
//这样写能够消除他们之间的连锁反应,因为他们每一个实例都是对因一个新的对象
function a(){
     return {
       name:'lihua'
     }
   }
   var obj1=a()
   console.log(obj1)
   obj1.name='xiaoming'
   var obj2=a()
   console.log(obj2)
   var c=a()
   console.log(c)

在上边两个function的基础上,我们可以分析一下为什么组建中的data要使用一个函数并且返回的内容还是个对象。因为组件需要有自己的独立的封闭的空间,这样才能够使每一个组件都有自己独立的数据

下边写一个计数器的例子(老生常谈,但是关键要自己理解- -‘’)

//这个能够实现解除他们之间连锁的关系,每一个组件对象都有一个独立的封闭空间,这也是组件所追求的状态
<div id='app'>
  <cpn></cpn>
</div>
<template id='temp'>
  <div>
    <h2>当前数字{{counter}}</h2>
    <button @click=add>+</button>
    <button @click=sub>-</button>
  </div>
</template>
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script>
 const app = new Vue({
   el:'#app',
   data:{

   },
   components:{
     cpn:{
       template:'#temp',
       data(){
         return{
           counter:0
         }
       },
       methods:{
         add(){
           this.counter++
         },
         sub(){
           if(this.counter==0){
              console.log('当前数字已经最小');
           }else{
             this.counter--
           }
           
         }
       }
     }
   }
 })
 </script>

和上边函数同样的道理,如果我们这里把data里边返回的对象是我们写好的对象(或者是直接返回一个变量,当然这里说不能直接返回一个变量的),那么这个时候所有组件都会共享一个数据

写在最后,记录学习~~~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值