为什么 data 属性是一个函数而不是一个对象?
实例和组件定义 data 的区别
vue 实例的时候定义 data 属性既可以是一个对象,也可以是一个函数
const app = new Vue({
el: "#app",
// 对象格式
data: {
foo: "foo",
},
// 函数格式
data() {
return {
foo: "foo",
}
},
})
组件中定义 data 属性,只能是一个函数
如果为组件 data 直接定义为一个对象
Vue.component("component1", {
template: `<div>组件</div>`,
data: {
foo: "foo",
},
})
则会得到警告信息
警告说明:返回的data应该是一个函数在每一个组件实例中
结论
- 根实例对象data可以是对象也可以是函数(根实例是单例),不会产生数据污染情况
- 组件实例对象data必须为函数,目的是为了防止多个组件实例对象之间共用一个data,产生数据污染。采用函数的形式,initData时会将其作为工厂函数都会返回全新data对象
