javascript - 我应该在 React 组件中的什么地方绑定(bind)方法?

标签 javascript reactjs ecmascript-6 arrow-functions

我现在学习 React 并注意到很多人在构造函数中绑定(bind)他们的方法。

像这样:

class MyComponent extends React.Component {
  constructor() {
    super();
    this.myMethod = this.myMethod.bind(this);
  }

  render() {
    <button onClick={this.myMethod}>Click me</button>
  }

  myMethod() {
    // do something
  }
}

但我习惯于这样写:

render() {
    <button onClick={this.myMethod.bind(this)}>Click me</button>
}

一些人告诉我,使用第二种方法是一种糟糕的体验。

那么您能告诉我第一种方法和第二种方法之间的区别吗?有什么好处和坏处吗?还是性能问题?

最佳答案

你是对的,别人告诉你的也是对的。

我们鼓励您在构造函数中进行绑定(bind),因为每个组件只调用一次构造函数,因此如果您在构造函数中进行绑定(bind),它只会在 Webpack bundle.js 文件中创建一个新对象/函数一次,因此影响不大

不鼓励您直接在渲染中进行绑定(bind),因为组件渲染有多种原因,例如当您执行 setState 时,当您的组件接收到新的 Prop 时,您的组件将渲染很多次。因此,由于您在组件渲染时直接在 render 中绑定(bind),因此每次在 Webpack bundle.js 中都会创建一个新函数,并且您的 bundle 文件大小会增加,当您的应用程序包含数千个组件时,这会影响性能,如果您直接在在每个组件中渲染。

因此建议您仅在构造函数中进行绑定(bind)。希望澄清

关于javascript - 我应该在 React 组件中的什么地方绑定(bind)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52191217/

相关文章:

javascript - 主干集合获取渲染在第一次加载时使用路由器运行两次

javascript - 根据输入类型显示/隐藏 div 组= "number"

javascript - 无法从支持的浏览器导入 es6 模块

javascript - 用空格或字符分隔文本并包含该字符

javascript - 使用嵌套的try/catch block 时错误的错误处理

javascript - 查找类名为 angularjs 的元素并将类添加到元素

reactjs - 如何输入文件上传的输入引用

reactjs - enzyme 测试代码内存清理

reactjs - 如何在 React 中更改 Monaco Editor 的背景颜色

javascript - 从 JavaScript 更新属性并删除数组中的重复元素