Vue组件data为什么是函数?

作者: 前端精髓 | 来源:发表于2019-02-14 12:43 被阅读1次

Vue 实例的数据对象。Vue 将会递归将 data 的属性转换为 getter/setter,从而让 data 的属性能够响应数据变化。对象必须是纯粹的对象 (含有零个或多个的 key/value 对):浏览器 API 创建的原生对象,原型上的属性会被忽略。大概来说,data 应该只能是数据 - 不推荐观察拥有状态行为的对象。

一旦观察过,不需要再次在数据对象上添加响应式属性。因此推荐在创建实例之前,就声明所有的根级响应式属性。

实例创建之后,可以通过 vm.$data 访问原始数据对象。Vue 实例也代理了 data 对象上所有的属性,因此访问 vm.a 等价于访问 vm.$data.a

_$ 开头的属性 不会 被 Vue 实例代理,因为它们可能和 Vue 内置的属性、API 方法冲突。你可以使用例如 vm.$data._property 的方式访问这些属性。

当一个组件被定义,data 必须声明为返回一个初始数据对象的函数,因为组件可能被用来创建多个实例。如果 data 仍然是一个纯粹的对象,则所有的实例将共享引用同一个数据对象!通过提供 data 函数,每次创建一个新实例后,我们能够调用 data 函数,从而返回初始数据的一个全新副本数据对象。

如果需要,可以通过将 vm.$data 传入 JSON.parse(JSON.stringify(...)) 得到深拷贝的原始数据对象。

var data = { a: 1 }

// 直接创建一个实例
var vm = new Vue({
  data: data
})
vm.a // => 1
vm.$data === data // => true

// Vue.extend() 中 data 必须是函数
var Component = Vue.extend({
  data: function () {
    return { a: 1 }
  }
})

注意,如果你为 data 属性使用了箭头函数,则 this 不会指向这个组件的实例,不过你仍然可以将其实例作为函数的第一个参数来访问。

data: vm => ({ a: vm.myProp })

相关文章

  • Vue组件data必须是函数

    Vue组件data必须是函数 一、组件data() 函数 定义一个组件 注册组件Vue.component('cp...

  • 9道vue面试题

    2.VUE组件data为什么必须是函数 答:Vue组件可能存在多个实例,如果使用对象形式定义data,则会导致它们...

  • vue 中的 data 为什么是函数?

    new Vue() 实例中,data可以是直接是一个对象,为什么在vue组件中,data必须是一个函数呢?因为组件...

  • 微信小程序和vue的区别

    数据类型 vue组件中data必须是函数 data(){return{}},new Vue中的选项可以是函数也可以...

  • vue组件data为什么必须是函数?

    首先看个例子 在new vue()中,data可以直接是一个对象,为什么在vue组件中,data必须是一个函数呢?...

  • vue组件data为什么必须是函数

    首先看个例子 在new vue()中,data可以直接是一个对象,为什么在vue组件中,data必须是一个函数呢?...

  • vue题库

    为什么vue组件中data必须是一个函数? 组件是可复用的,当复用组件时,由于数据对象指向的是同一个data对象,...

  • Vue前端面试2021-018

    1、为什么组件中的data是一个函数? Vue中的组件是要被重复使用的,如果data只是一个对象,多个复用的组件他...

  • 2022年vue面试题总结

    vue 中 data 为什么是一个函数 vue 组件的通信 vuex 的原理 vue 生命周期 v-if 与 v-...

  • 2020-02-29 Vue 中 data 为什么是一个函数

    [vue中组件的data为什么是一个函数] 1. 前言 在学习vue的时候,一直纳闷一件事:组件的data数据为什...

网友评论

    本文标题:Vue组件data为什么是函数?

    本文链接:https://www.haomeiwen.com/subject/eofeeqtx.html