为什么箭头函数可以在ReactJS类上使用而不能在纯ES6类上使用?

时间:2019-05-05 14:29:46

标签: javascript reactjs class ecmascript-6 arrow-functions

我想知道我是否可以使用箭头函数编写纯ES6类。这是我的课程示例:

class PhoneNumber {
    constructor(phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

    testEmpty() {
        if (!this.phoneNumber) return true;
        return false;
    }
}

似乎我不能将其写为:

class PhoneNumber {
    constructor = phoneNumber => {
        this.phoneNumber = phoneNumber;
    }

    testEmpty = () => {
        if (!this.phoneNumber) return true;
        return false;
    }
}

尽管如此,我可以在React上写类似的东西:

   class PhoneNumber extends React.Component {
         state = {
              phoneNumber: this.props.phoneNumber;
         }

         testEmpty = () {
             if (!this.state.phoneNumber) return true;
             return false;
         }
     }

为什么React组件,即使是一个类,也接受ES6箭头函数,而我的纯类却不接受?

1 个答案:

答案 0 :(得分:2)

构造函数根本不能是箭头函数。 您可以在react中创建箭头方法,因为react在幕后使用了针对类字段的建议。您可以使用babel提案插件将它们添加到您的项目中。 使用箭头类方法的好处是在这种方法中 this 的值将在回调中引用类本身。因此,您可以在事件监听器中使用箭头方法,而无需使用包装函数或bind()。