在构造函数或类中的粗箭头中绑定

2023-11-30

所以我想知道这之间是否有区别:

import React, { Component, PropTypes } from 'react';

class Example extends Component {
  constructor(props) {
    super(props);
    this.state = {
      page : 1
    };
  }

  nextPage = () => {
    this.setState({ page: this.state.page + 1 });
  }

  previousPage= () => {
    this.setState({ page: this.state.page - 1 });
  }

  render() {
    const { page } = this.state;
    return (
      <div>
        <H1>{page}</H1>
        <Button onClickPrevious={this.previousPage} onClickNext={this.nextPage} />}
      </div>
    );
  }
}

Or

import React, { Component, PropTypes } from 'react';

class Example extends Component {   
    constructor(props) {
         super(props);
         this.nextPage = this.nextPage.bind(this);
         this.previousPage = this.previousPage.bind(this);
         this.state = {
              page: 1
             };
  }

  nextPage() {
    this.setState({ page: this.state.page + 1 });   }

  previousPage() {
    this.setState({ page: this.state.page - 1 });   }

  render() {
    const { page } = this.state;
    return (
      <div>
        <H1>{page}</H1>
        <Button onClickPrevious={this.previousPage} onClickNext={this.nextPage} />}
      </div>
    );   
  }
}

我想知道每个功能的性能是否相同,或者还有其他好处吗?

进一步阅读(https://medium.com/@esamatti/react-js-pure-render-performance-anti-pattern-fb88c101332f#.khf30fuaq)


绑定事件处理程序的最佳位置是您的constructor。这样,您的事件处理程序的上下文就会绑定到组件实例。您可以访问props and state并打电话setState or forceUpdate来自这样的绑定处理程序。

结合与arrow功能也有自己的优点。 箭头函数总是从定义它们的地方获取上下文。所以实际上这个例子就相当于:

箭头函数语法是一种定义函数的方法,语法如下:

change = (ev) => this.setState({ text: ev.target.value });

这是一种比编写更简洁的方法function(ev) { .... }陈述。如果您不提供{ and }后面的括号=>箭头,此类函数是立即返回的单个表达式。所以这脱糖成这样:

change = function(ev) { return this.setState({ text: ev.target.value }); }.bind(this);

因此两者.bind() and arrowfunction 导致创建一个新函数

总之,您想要绑定函数的方式取决于您的用例。

欲了解更多详细信息,您可以阅读this文章:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在构造函数或类中的粗箭头中绑定 的相关文章

随机推荐

  • 如何清除游戏中心实时排行榜数据?

    是否可以清除实时游戏中心排行榜 而不是沙盒排行榜 的数据 如果无法清除 是否有办法隐藏排行榜不显示 谢谢 转到 iTunesConnect 中的排行榜 并将分数范围更改为超出范围的值 例如 我的一些高尔夫球手发布的成绩远远低于标准杆 我将范
  • 在 Mac OS X 10.10 上以 64 位模式执行 python

    我正在尝试在 64 位模式下执行 python 从这篇文章 如何在 Mac OS X 上强制使用 64 位 python 我检查了 python 都有 32 64 位二进制 gt lipo info which python gt Arch
  • 在 ruby​​ gpgme 中使用密码回调

    我正在使用 ruby gpgme gem 1 0 8 我的密码回调未被调用 def passfunc args fd args last io IO for fd fd w io puts mypassphrase io flush end
  • 回发后在 TextBox 中设置焦点

    我有一个简单的页面 我想根据文本框中的值过滤列表框 两者都在 UpdatePanel 中 这可以正常工作 但是 在回发后 文本框失去了焦点 所以我将焦点设置回 page load 中 然后我注意到光标现在位于文本的开头 而我希望它位于末尾
  • 使用selenium Python滚动到无限加载页面的末尾

    我正在使用 Selenium 从 Twitter 上抓取关注者姓名 并且该页面是无限的 每当我向下滚动时 我都可以看到新的关注者 不知何故 我想转到页面底部 以便我可以scrape所有的追随者 while number 5 driver e
  • 如何在 SML/NJ 中进行按位与运算?

    我正在编写的程序需要它 重复平方来计算 x n 我似乎找不到它的语法 或者是否支持它 它们可在Word8 and Word结构 let open Word8 infix andb orb xorb notb lt lt gt gt gt g
  • async wait 任务空引用异常

    I am getting NullReferenceExceptions on a webforms project I m maintaining The catch is that there is no stacktrace for
  • 解析命令调用的输出

    因此 我尝试从 python 执行 shell 命令 然后将其存储在数组中或直接解析管道 shell 命令 我通过 subprocess 命令管道传输 shell 数据 并使用 print 语句验证输出 它工作得很好 a subproces
  • 单击/激活 jQuery UI 选项卡时触发函数?

    我正在使用 jQuery 选项卡 其中一个选项卡中的内容是通过 AJAX 调用检索的 但我不想在单击选项卡 激活 之前触发调用 因为用户可能不一定单击它 最好的方法是什么 jQuery UI 提供select and show选项卡的事件
  • 默认情况下,Java 类会隐式扩展 java.lang.Object [重复]

    这个问题在这里已经有答案了 在本教程中 http www studytonight com java object and classes 我读到java 类可以选择扩展一个父类 默认情况下 它将扩展 java lang Object No
  • 如何在 MATLAB 中使用线性索引为 4-D 矩阵的对角线赋值?

    我有一个 4 维矩阵A尺寸的NxNxPxQ 如何轻松地将每个对角线值更改为 1NxN矢量化方式的二维子矩阵 结合 gnovice 的建议 对元素进行索引的一种简单方法是 N P Q size A get dimensions of your
  • 在下载过程中使用 swingworker 更新 JProgressBar

    问题解决了 非常感谢 Trashgod 和 HoverCraftFullOfEels 我终于通过使用下面的示例并稍微改变它得到了这个概念 更改允许缩放进度条 默认为 100 个单位 再次感谢您的耐心和愿意解决这个问题 意味着很多人 凯特 p
  • 发送大量发布消息:正在进行中的发布过多错误

    这是泛美卫生组织异步客户端 client new MqttAsyncClient appProps getProperty mqtt broker appProps getProperty mqtt clientId new MemoryP
  • 可以解析 HTML 文档并构建 DOM 树(java)

    是否可能以及可以使用哪些工具将 html 文档解析为字符串或文件 然后构建 DOM 树 以便开发人员可以通过某些 API 遍历该树 例如 DomRoot parse myhtml html for tags DomRoot 注意 这是一个
  • 为什么MIPS不能在寻址模式下使用两个寄存器?

    我很好奇为什么我们不允许在 MIPS 中使用寄存器作为偏移量 我知道你can t使用寄存器作为偏移量 如下所示 lw t3 t1 t4 我只是好奇why情况就是如此 是硬件限制吗 或者只是 ISA 的一部分 PS 如果您正在寻找替代方法 请
  • 根据 2 个以上组的百分比随机分配对照组与治疗组

    小猪放弃了我之前的问题python pandas 根据 随机分配对照组与治疗组 感谢 maxU 我知道如何将随机对照组 治疗组分配为 2 个组 但如果我有 3 个或更多组怎么办 例如 df head customer id Group ma
  • 如何用python3生成unicode字符串

    我用过这个 u unicode text utf 8 但是使用 Python 3 时出现错误 或者 也许我只是忘记包含一些内容 NameError global name unicode is not defined 谢谢 Python3
  • 从字符串中提取可变长度的数量

    我想从字符串中提取多个可变长度 该字符串如下所示 used memory 1775220696 我想要1775220696变量中的一部分 对此有很多疑问 但我找不到适合我需要的解决方案 您可以使用cut my val echo used m
  • 从 Java 应用程序启动 OpenVPN [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 是否可以通过 Java 应用程序启动 OpenVPN 如果可能的话 最好的方法是什么 这样它是跨平台的 并且可以在所有安装了 OpenVPN 的平台上运行 你可以像这样用 Jav
  • 在构造函数或类中的粗箭头中绑定

    所以我想知道这之间是否有区别 import React Component PropTypes from react class Example extends Component constructor props super props