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

2024-01-27

创建 React 类时,哪个更好?

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

  doSomething () { ... }
}

or

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

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

对此有何想法?


公共类字段语法(所以doSomething = () => {...}) is 尚未成为 ECMAScript 的一部分 https://github.com/tc39/proposals但它做得很好,我非常有信心它会实现这一目标。

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

  • 清晰、简洁的表达语法this binding
  • 浏览器何时支持此功能的未来证明
  • 不关心实施

对我来说,这是一场明显的胜利。在大多数情况下,您甚至不需要constructor(props),将您从样板代码中拯救出来super call.

如果 Babel 实现会导致内存泄漏,您可以确定这些问题会很快被发现并修复。您更有可能因必须编写更多代码而自己造成泄漏。

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

使用 React 时,在构造函数中使用粗箭头函数还是绑定函数更可取? 的相关文章

  • 在 React 组件中等待异步函数并显示 Spinner

    初学者在这里 尝试从服务器获取一些数据并在获取后将其显示在我的反应组件中 但是 我在将异步函数集成到我的反应组件中时遇到了麻烦 import React useState from react import request from gra
  • 玉石压痕错误

    因此 对于我的 Express 网站 我使用 jade 所以我决定尝试修改我的布局文件 以便我可以开始设计我的网站 我修改了原始布局代码 有效 但我开始在任何扩展布局的文件中出现缩进错误 如下所示 500 Error home kevin
  • 为什么我可以使用 Date 对象进行数学运算? [复制]

    这个问题在这里已经有答案了 当我像这样减去两个日期对象时 const startTime new Date await someAsyncStuff const endTime new Date const elapsedTime endT
  • 如何使用 Nextjs/React 将 JSON 对象导出到 Excel?

    我有一个检索 json 对象的端点 如下所示 data id 1 temaIndicador Indian codigo 001 observaciones Interactions Specialist tertiary Regional
  • 如何使用 github 托管外部 CSS 文件?

    我将 css 上传到 github 然后转到网站上的文件并单击 raw 选项 我尝试将其添加到网页中 但 chrome 给出以下错误 资源解释为样式表 但使用 MIME 类型 text plain 进行传输 https raw github
  • document.write 在同一页面上显示内容。

    我对 javascript document write 方法有疑问 大多数情况下 当我使用 document write 时 它会向我显示在不同页面中使用该方法编写的内容 例如 如果我写这样的命令 document write Hello
  • 在给定索引上将字符串分成两部分并返回两部分

    我有一个字符串 需要在给定索引上拆分 然后返回两个部分 并用逗号分隔 例如 string 8211 8 211 98700 98 700 因此 我需要能够在任何给定索引上拆分字符串 然后返回字符串的两半 内置方法似乎执行分割 但只返回分割的
  • 为什么这个递归函数返回未定义?

    我正在尝试编写一个使用递归组合两个字符串的函数 我的代码如下 但我不知道为什么该函数返回未定义 特别是当我在基本情况下使用 console log 时 它不会打印未定义而是打印正确的值 var str3 function merge str
  • 基于范围内变量的角度设置形式动作

    我一直在尝试设置一个搜索表单 可以在其中注入表单操作属性 在我的表格中我有
  • 当 Chrome 中嵌套滚动中的数据更改时防止页面滚动

    我在页面中有一个固定大小的元素 带有 溢出 滚动 其内容经常更改 我预计该元素内部发生的更改会影响该元素的滚动 但不会影响页面滚动 但是当这个元素位于页面顶部时 页面本身开始滚动 我怎样才能防止这种情况发生 要重现此行为 我在 chrome
  • 即使我的情况按预期发生变化,Angular ngClass 也不会更新我的课程

    我正在创建的模板中有类似的内容 div class nng 3 div 价值app layout isNavbarFixed等用零或一初始化 并且页面第一次加载时 适当的类被插入到我的div 不过 此后通
  • 有什么办法可以避免使用 React 的 SSR 中的“文本内容不匹配”警告?

    我已经用 webpack 和 HMR 设置了 SSR 环境 有一个静态呈现的标记 服务器传递给客户端和client js捆绑与ReactDOM hydrate 方法 如果我更改源代码 HMR 可以正常工作 但会在控制台中发出警告 指出客户端
  • 如何计算一行中Flexbox项目的数量?

    网格是使用 CSS flexbox 实现的 Example http jsbin com jumosicasi edit html css js output 本示例中的行数为 4 因为我出于演示目的固定了容器宽度 但是 实际上 它可以根据
  • eventSources 到事件 Json,完整日历

    我正在尝试从 eventSources 获取 json 调用到我的事件 我在 eventSources 中返回的 json 是 title Title Test start 1305841052 当我将此字符串传递到事件中时 它会正确显示日
  • 有序 JSON 对象

    我有一个 servlet 它与数据库通信 然后返回有序 按时间排序 对象的列表 在servlet部分 我有 access DB returns a list of User objects ordered ArrayList users M
  • 从json中获取所有子节点

    我有以下 json var source k 01 k 02 children k 05 k 06 children k ABC k PQR k 07 k 03 我希望能够指定 k 的值并取回所有孩子 以及孙
  • HTML5 地理定位 - 在 iOS 上无法始终工作

    目前正在使用 HTML5 地理定位 我已经在所有网络浏览器上测试了它 它似乎工作正常 然而 当我在 iPad 上测试地理定位时 它在 iPad mini 上始终有效 但当我将其放在更大的 iPad iPad 2 上时 位置似乎并不总是有效
  • 拉斐尔路径交叉点不起作用

    我对拉斐尔和 pathIntersection method JSFiddle 示例 http jsfiddle net t6gWt 2 您可以看到有两条线都与曲线相交 但当我使用 pathIntersection method 有一个未解
  • 在引导程序中以编程方式更改选项卡窗格选项卡

    我使用的选项卡窗格定义为 ul class nav nav tabs li a href personal Personal Information a li li class active a href contact Contact a
  • jQuery appendTo(), json 在 IE 6,7,8 中不起作用

    我这两天绞尽脑汁想找到解决办法 我使用 jQuery ajax 从数据库中获取值 以便在另一个框发生更改时更新一个框 php 脚本从数据库中获取值 然后输出 json 它在 FF 中工作正常 但在所有版本的 IE 中 选择框都不会更新 我已

随机推荐

  • 通过使用 React 按钮设置状态来循环遍历数组中的对象

    所以我有一些想要循环浏览的数据 const data names name Jordan additional data name Holly additional data name Sean additional data Using
  • 使用 PrintDocument 打印多页

    我正在尝试打印发票 发票应该能够在多页上打印 但这就是问题出现的地方 我可以在单页上完美地打印发票 但是一旦发票不适合在单页上打印 打印作业就会退出第一页 这是我正在使用的代码 artikelen 是文章列表 List 我读过几个类似的例子
  • 生产环境中的 Rails 服务器如何工作?

    我想知道 总的来说 它更像 PHP 它加载到内存中 执行 然后在每次连接时终止 或者像 Node js 单个实例保留在内存中并接受所有请求 从技术上讲是后者 但根据应用程序服务器 可以将其设置为look喜欢前者 因为前者更容易管理 Phus
  • 如何在 Dropwizard(泽西岛)中记录 JSON 响应

    我想知道如何配置 Dropwizard 来记录 JSON 响应 在 Service 子类 例如 HelloWorldService 的 run 方法中 添加 environment setJerseyProperty ResourceCon
  • pthread的调度方法?

    由于没有显式调度 pthread 被调度为由内核以随机方式运行 pthread 库中是否定义了相同的调度方法 例如优先级 线程的优先级被指定为增量 该增量被添加到进程的优先级上 更改进程的优先级会影响该进程中所有线程的优先级 线程的默认优先
  • 如何向 DetailDisclosureButton 添加标签文本?

    我正在使用 iOS Swift 2 0 应用程序 我一生都无法弄清楚如何将文本设置在右侧UITableViewCell就在披露指示符 V 形之前 除了创建自定义cell accessoryView 这是 设置应用程序 的屏幕截图 它正是我想
  • PHP 命令,未找到

    我尝试安装composer通过 PHP 命令 如 getcomposer 站点中所述 但 bash 抛出错误 bash php command not found 所以我在谷歌上搜索了一下 我得到了一些答案 1 添加php二进制文件路径 P
  • C# 中灵活的日志记录接口设计

    我想编写自己的日志记录类 用 C 编写 它实现一个标准接口 我可以从代码的任何部分调用该接口 我的想法是让多个 Log 类实现 Logger 接口 每个类都有其特定的日志目的地 例如 FileLogger 将实现记录到文件 TextBox
  • 从 scala 访问公共静态 java 方法

    我正在尝试在这里使用 Java facebook 库http restfb com publishing http restfb com publishing在 scala play2 应用程序中 但是当尝试调用静态时with下面的方法 它
  • 我该如何修复 AttributeError: 'dict_values' 对象没有属性 'count'?

    这是我的code http pastebin com tzPpqE97文本文件是here http www dropbox com s 2bklv7p4ylq8wur web graph zip dl 0http import networ
  • IBM MQ v8 和 Glassfish 本地设置端口配置问题

    给出以下本地设置 IBM WebSphere MQ Advanced for Developers V8 0 帕亚拉4 1 2 172 我想通过默认端口 1414 以外的 JMS 连接到本地队列管理器 尽管我向连接工厂添加了几个属性来配置端
  • 如何将对象注入到 WCF 服务中

    如果我有这样的服务定义 实现 using System using System ServiceModel namespace aspace service ServiceContract Namespace http aspace ser
  • Web API 方法返回 JSON 数据

    我正在使用 ASP net Web API 2 0 并且希望我的方法仅以 JSON 格式返回数据 请建议对 API 控制器类中的以下方法进行代码更改 public async Task
  • Excel - 计算与 ID 匹配的唯一值,针对 100,000 多个案例进行了优化

    参考下面的 Excel 屏幕截图 我正在寻找一个公式解决方案 用于计算 A 列中每个 ID 号的 B 列 颜色 中唯一值的数量 我已将所需结果归入 C 列 因此 例如 ID 1 A2 只有一种唯一颜色 灰色 B2 这将在 C2 中返回 1
  • 将 favicon 添加到 javascript Bookmarklet(使用 window.open)

    我有一个小书签 它启动一个 window open javascript 函数 用我的小书签打开一个小窗口 一个用于在任何访问过的站点和我的服务器之间进行通信的外部功能 我想要一个favicon当书签添加到书签工具栏时显示 我意识到书签是
  • 如何向 Scala 枚举对象添加方法?

    我正在使用 Scala 2 8 并定义这样的枚举 object Stooges extends Enumeration type Stooge Value val Larry Curly Moe Value 我想向这个枚举添加一个方法 循环
  • 在多个数据库上使用实体框架

    我正在编写一个工资系统 它将与现有系统集成 原始系统有一个主数据库 用于处理用户管理和一些全局配置 下面有多个结构相同的数据库 基本上每个数据库都是一个公司的工资数据库 所有这些都与主数据库绑定 因为它属于父数据库公司拥有多家子公司 每个子
  • 文件名 NSString 在空格中添加了不必要的 %20

    已解决 感谢 Regexident 我有一个应用程序可以将 PDF 的文件路径传递给自定义的 id init初始化方法 它被添加到表中 当它被选择时 它会为不存在的文件调用 else 语句 void gridView AQGridView
  • 如何制作一条动画线来跟踪移动的 CSS 元素?

    更新 我曾请求帮助修复我使用 SVG 动画插件的第一次尝试 现在有一个解决方案 点击此链接 它有效地回答了这个问题 尽管 Jleagle 指出的 attr 也可以找到解决方案 https stackoverflow com question
  • 使用 React 时,在构造函数中使用粗箭头函数还是绑定函数更可取?

    创建 React 类时 哪个更好 export default class Foo extends React Component constructor props super props this doSomething this do