javascript - 使用 React 时,在构造函数中使用粗箭头函数还是绑定(bind)函数更可取?

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

在创建 React 类时,哪个更可取?

export default class Foo extends React.Component {
  constructor (props) {
    super(props)
    this.doSomething = this.doSomething.bind(this)
  }

  doSomething () { ... }
}

export default class Foo extends React.Component {
  doSomething = () => { ... }
}

我的一个同事认为后者会导致内存问题,因为 babel 转译代码以在闭包内捕获 this,而该引用将导致实例不被 GC 清理。

对此有什么想法吗?

最佳答案

公共(public)类字段语法(所以 doSomething = () => {...})是 not yet part of ECMAScript但它做得很好,我非常有信心它会实现这一目标。

因此使用这种语法会强制您进行转译,但它带来了优势:

  • 表达this绑定(bind)的清晰、简洁的语法
  • 浏览器何时支持此功能的 future 证明
  • 不关心实现

对我来说,这是一场明显的胜利。在大多数情况下,您甚至不需要 constructor(props),从而避免了样板 super 调用。

如果 Babel 实现会导致内存泄漏,您可以确定它们会很快被发现并修复。由于必须编写更多代码,您更有可能自己制造泄漏。

关于javascript - 使用 React 时,在构造函数中使用粗箭头函数还是绑定(bind)函数更可取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41381720/

相关文章:

javascript - 运行 ChartEditor 后,setOptions() 不适用于 ChartWrapper 中的图表

javascript - 使用 JavascriptCore 在 iOS 中解决 Javascript promise

javascript - Wrapper.instance() 不是函数

.net - 在 AspNet Core 中调试 ReactJS 组件

javascript - 如何在setState回调中获取更新后的状态?

javascript - 服务 worker 返回的 javascript 响应对象中的 json 内容

javascript - 什么时候在JavaScript构造函数和类中创建新对象?

javascript - *.default 不是构造函数,带有导入的js插件

javascript - 修复了 Chrome 扩展中的窗口大小

javascript - PHP重定向头不是重定向吗?