无法在React Component中的let / var中存储箭头函数

时间:2016-06-15 14:47:48

标签: javascript reactjs ecmascript-6 jsx babel

我有一个由extends React.Component 定义的反应组件。在其中,与render方法一起,是:

constructor(props, context) {
    super(props, context);

    this.state = {
        open: false,
    };
}

handleClose = () => { //this works
    this.setState({open: false});
};

handleOpen = () => { //this works
    this.setState({open: true});
};

let empty = () => {}; // does not work, error  Parsing error:      Unexpected token

如果我使用let或const作为任何箭头函数的前缀,我似乎会收到意外的令牌错误。我在这里错过了什么吗?

感谢

4 个答案:

答案 0 :(得分:2)

阅读关于课程的babel documentation。使用letconst不是ES6可能的类定义前缀

的一部分

答案 1 :(得分:0)

ECMA 2015 spec似乎只允许类定义正文中的methodsstatic methods

因此,在这种情况下,不允许赋值语句,因此来自babel的Unexpected token错误。

答案 2 :(得分:0)

您尝试使用实验性的ES7功能,并且可能只启用了ES6(您也不能在类中使用let或const前缀)。如果你正在使用babel6,那么切换到正确的插件应该很简单。从基本相同的问题看到这个答案:How to use ES6 arrow in class methods?

答案 3 :(得分:0)

您似乎正在使用class properties declartion proposal。建议的语法是:

class ClassWithoutInits {
  myProp;
}

class ClassWithInits {
  myProp = 42;
}

如您所见,没有letconstvarlet empty = () => {};不起作用,因为它不是有效的语法,就像错误消息告诉你的那样。