首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vue JS:数据差异(){ return {} } vs数据:() => ({ })

Vue JS:数据差异(){ return {} } vs数据:() => ({ })
EN

Stack Overflow用户
提问于 2018-02-26 11:04:30
回答 2查看 19.7K关注 0票数 45

我很好奇这两个数据函数,这两者之间有什么区别吗?

我通常看到的是

代码语言:javascript
复制
data () {
  return {
    obj
  }
}

和我通常使用的ES6“胖箭头”

代码语言:javascript
复制
data:()=>({
  obj
})
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-26 11:27:42

在您的具体示例中没有区别,但这两种表示法之间有一个非常重要的区别,特别是在涉及到this时:this不会在箭头函数中反映vue实例。

所以,如果你曾经有过这样的经历:

代码语言:javascript
复制
export default {
    props: ['stuffProp'],
    data: () => ({
      myData: 'someData',
      myStuff: this.stuffProp
    })
}

它不会像你期望的那样工作。this.stuffProp不会获得stuffProp属性的值(有关原因的更多信息,请参见下文)。

修复

将箭头函数更改为,或者(ES6/EcmaScript 2015符号):

代码语言:javascript
复制
export default {
    props: ['stuffProp'],
    data() {                                   // <== changed this line
      return {
        myData: 'someData',
        myStuff: this.stuffProp
      }
    }
}

或to (常规,ES5和之前,表示法):

代码语言:javascript
复制
export default {
    props: ['stuffProp'],
    data: function() {                           // <== changed this line
     return {
        myData: 'someData',
        myStuff: this.stuffProp
      }
    }
}

原因

在声明Vue方法时,不要使用箭头函数(() => {})。它们从当前作用域(可能是window)中提取this,并且不会反映Vue实例。

API Docs

请注意,您不应将箭头函数与data

(例如data: () => { return { a: this.myProp }})一起使用。原因是箭头函数绑定了父上下文,因此this不会像您预期的那样是Vue实例,而this.myProp将是未定义的。

票数 62
EN

Stack Overflow用户

发布于 2020-08-06 15:56:04

它与ES5或ES6语法有关,如果您在前面的脚本中使用过箭头函数()=>,那么使用以下代码是安全的。

代码语言:javascript
复制
// tested and this.myData can be accessed in the component
data: () => { return {
    myData: 'someData',
    myStuff: this.stuffProp
} }

// this also works
data: () => ({
    myData: 'someData',
    myStuff: this.stuffProp
})

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48980865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档