data选项必须是函数以返回新对象,避免多实例共享数据导致状态污染;其返回对象的顶层属性自动响应式并代理到this,命名不能以_或$开头,建议预先声明所有字段。

Vue Options API 中,data 选项必须是一个函数,返回一个普通 JavaScript 对象,这个对象的顶层属性会自动变成响应式,并被代理到组件实例上(即 this),供模板和方法直接访问。
data 必须写成函数形式
这是为了避免多个组件实例共享同一份数据对象。如果写成对象字面量,所有实例会共用同一个引用,导致状态污染。
- ✅ 正确写法:使用函数返回新对象
- ❌ 错误写法:
data: { count: 0 }(会被 Vue 警告,且多实例间状态互相影响)
返回对象的属性就是响应式字段
data 函数返回的对象中,每个顶层属性都会被 Vue 的响应式系统包装(Vue 3 使用 Proxy)。修改这些属性会触发视图更新。
使用 `@ainative/vue-sdk` 为 Vue 3 应用添加 AI 聊天功能。适用于以下场景:(1) 安装 `@ainative/vue-sdk`,(2) 在 Vue 组件中使用 `useChat` 组合式函数,(3) 提供……
-
this.message等价于this.$data.message - 属性名不能以
_或$开头,否则不会被代理(需通过this.$data._private访问) - 建议提前声明所有可能用到的字段,即使初始值为
null或undefined,避免响应式“丢失”
常见写法与注意事项
函数可以是普通函数或箭头函数,但要注意 this 指向:
立即学习“前端免费学习笔记(深入)”;
- 普通函数:
data() { return { name: 'Vue', version: 3 } }——this指向组件实例,可访问props等 - 箭头函数:
data: (vm) => ({ msg: vm.title || 'default' })——this不可用,但第一个参数vm是组件实例 - 不推荐返回带原型的对象(如
new Date()、document.createElement()),应返回纯数据对象
配合生命周期使用示例
data 初始化后,在 created 钩子中就能访问:
created() { console.log(this.count) // 可读取 data 返回的属性 }- 模板中直接插值:
{{ count }}或事件中修改:@click="count++"

















