为什么每一个组件实例都需要有自己的状态(以及组件的data属性为啥必须是函数且需要返回一个对象)
解答如下
- 函数每执行一次,会分配新的内存地址。
- 函数返回新的对象,新的对象相互独立,因此不会相互影响。
- 组件data的属性只是在本地组件范围内有效,采用函数返回的形式,不会造成跨组件的变量污染。
计数器 - 锐客网
当前数值:{{count}}
src="https://www.it610.com/article/js/vue.js">
>
const vm = new Vue({
el:"#app",
data:{
count:0
}
})
1.首先,我们将下面这个计数器抽取成一个组件。
代码:
Document - 锐客网
当前数值:{{counter}}
src="https://www.it610.com/article/js/vue.js">
>
Vue.component('cpn',{
template:'#cpn',
data(){
return {
counter:0
}
},
methods:{
increment(){
this.counter++
},
decrement(){
this.counter--
}
}
})
const vm = new Vue({
el:'#app'
})
【为什么每一个组件实例都需要有自己的状态(以及组件的data属性为啥必须是函数且需要返回一个对象)】浏览器页面:
文章图片
这是我们所希望的效果,组件之间相互独立,互不影响。点击计数器一并不会导致计数器二、三跟着变化。
2.接下来演示跨组件变量污染的情况(将返回的对象定义在外部,data内不会每次返回一个新的对象了)
代码:
Document - 锐客网
当前数值:{{counter}}
src="https://www.it610.com/article/js/vue.js">
>
const obj = {
counter:0
}
Vue.component('cpn',{
template:'#cpn',
data(){
return obj
},
methods:{
increment(){
this.counter++
},
decrement(){
this.counter--
}
}
})
const vm = new Vue({
el:'#app'
})
浏览器界面:
文章图片
点击计数器一会导致计数器二、三跟着变化,这是我们在开发中不希望看到的。
以上便是组件的data属性必须定义为一个函数且需要返回一个对象的原因(注意:返回的对象直接写在data属性内,不能够将这个对象先在外部定义)
推荐阅读
- 为什么你的路演总会超时()
- 财商智慧课(六)
- 吃了早餐,反而容易饿(为什么?)
- 遗憾是生活的常态,但孝顺这件事,我希望每一个人都不留遗憾
- 为什么越花钱的人越有钱,越舍不得花钱的人却越穷()
- dubbo基本认识
- 为什么985/211的学生能胜任工作获得老板的青睐。
- 年轻人,干了孤独这杯酒
- 为什么孩子一定要学会可视化思维!
- 代笔(想象)