javascript - 为什么以 ES6 方式定义 React 组件构造函数行不通?

标签 javascript reactjs ecmascript-6

我正在尝试转换它:

constructor () {
  ...
}

对此:

constructor = () => {
  ...
}

但这行不通。您能否解释一下为什么不允许这样做?它是否有任何危险,或者只是一个任意选择不允许构造函数是非静态的?

最佳答案

ES6 类基本上只是旧 ES5 原型(prototype)继承周围的语法糖。 ES6 中的构造函数类似于 ES5 中的函数本身。例如:

class foo {
    constructor () {
       console.log('hello world');
    }
}

相当于:

function foo() {
    console.log('hello world');
}

您尝试执行的类定义中的箭头函数尚未成为 ecmascript 的一部分,但感谢 babel 的转译器,您现在可以使用它们。 babel 的作用如下:

class foo {
   boundFunction = () => {
       console.log('bound');
   }
}

变成:

function foo() {
    this.boundFunction = () => {
        console.log('bound');
    }
}

请注意,babel 正在将函数从类定义中取出,并将其移至构造函数中。这样,每次创建一个对象时,它都会获得自己的函数实例

然后我们就进入了你的场景。这会告诉 babel 做什么?

class foo {
   constructor = () => {
       console.log('bound');
   }
}

因此,从 boundFunction 示例来看,babel 应该将此函数移至构造函数中,但从第一个示例来看,它也应该> 构造函数。这些是互斥的东西,所以 babel 会给你一个错误。

关于javascript - 为什么以 ES6 方式定义 React 组件构造函数行不通?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47514196/

相关文章:

java - 在 WebView 在线表单中填写没有 id 的文本字段

javascript - 在 React Flux 中哪里进行 Ajax 调用

javascript - JS中如何访问父对象?

javascript - 使用参数链接到路线的正确方法是什么?

javascript - 导出要与 require() 一起使用的 Node.js 类

javascript - 为什么 Yield 不能与请求模块一起使用?

javascript - 为什么我们需要 backbone js 或任何 JS MVC 框架?

javascript - 功能组件未被渲染

javascript - 将 javascript es6 类转换为函数式编程风格

javascript - Lodash debounce 在 React 中不起作用