文章目录
Vue 中的 data
必须声明为 函数(返回对象),而非直接使用对象,其核心目的是 确保每个组件实例拥有独立的数据副本,避免多个实例间数据共享导致的意外污染。这是 Vue 组件化设计的核心机制之一,保障组件的可复用性和数据隔离性。
一、问题根源:对象引用共享
1. 直接使用对象的隐患
- 场景假设:若
data
直接定义为对象,所有组件实例将 共享同一对象引用。 - 示例代码:
// ❌ 错误写法:data 为对象 export default { data: { count: 0 }, methods: { increment() { this.count++ } } }
- 问题复现:
当多个组件实例化时,所有实例操作的count
实际指向同一内存地址,导致数据互相影响。
2. 函数返回对象的优势
- 独立数据副本:每次组件实例化时,调用
data
函数生成 全新数据对象。 - 正确示例:
// ✅ 正确写法&