Chrome、Firefox 调试器未在 React 应用程序中显示“this”的正确值

2023-12-09

这是 React 组件类中的一些代码(使用 CRA 2 搭建脚手架)

  click = () => {
    console.log(this, "hello");
    let x = 1 + 1; //This is just here to let chrome put a break point here. 
  }

当此代码运行时,它将把组件对象打印到控制台。

但是 - 如果我将调试器附加到该点,Chrome (68) 和 Firefox (63) 都会将“this”显示为未定义。

这里发生了什么?

这与用于将 click 创建为类属性的 transform-class-properties babel 插件有关吗?

Edit:是的,看起来确实如此。

如果我们手动绑定该方法,例如:

  constructor() {
    super();
    this.click2 = this.click2.bind(this);
  }

  click2() {
    console.log(this, "hello");
    let x = 1 + 1;
  }

然后就可以正常工作了。

无论如何 - 有没有一种方便的方法来解决这个问题,这样我就不必放入所有这些绑定语句?


我创建了一个CodeSandbox 上的示例我认为重现了你的问题,尽管我不确定。如果没有,请创建您自己的示例。相关代码包含在下面。

在此示例中,代码运行良好。console.log(this, "hello") logs a Square正如你所期望的,对象+“你好”。如果你在let y = 2 + 2行,Chrome 调试器将显示

this: undefined
x: 2
y: undefined

当然,y是未定义的,因为let y语句尚未执行。x已定义,如预期的那样。this是未定义的,因为 React 和 Babel 在幕后跳过了很多圈子,并且this事实上,是未定义的。如果您想访问this从调试器中,您需要使用_this。事实上,即使你在线上放置了一个断点let y = 2 + 2,这不是正在执行的实际源代码或实际断点所在的位置。您所看到的是由源图它允许您查看并在您编写的代码上设置断点,尽管实际运行的代码完全不同(Babel 等处理的结果)。

我写的代码是:

class Square extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      value: null
    };
  }

  click = () => {
    console.log(this, "hello");
    let x = 1 + 1; //This is just here to let chrome put a break point here.
    let y = 2 + 2; //This is just here to let chrome put a break point here.
  };

  render() {
    return (
      <button className="square" onClick={this.click}>
        {this.props.value}
      </button>
    );
  }
}

实际运行的代码是:

var Square =
/*#__PURE__*/
function (_React$Component) {
  (0, _inherits2.default)(Square, _React$Component);

  function Square(props) {
    var _this;

    (0, _classCallCheck2.default)(this, Square);
    _this = (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(Square).call(this, props));
    (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "click", function () {
      console.log((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "hello");
      var x = 1 + 1; //This is just here to let chrome put a break point here.

      var y = 2 + 2; //This is just here to let chrome put a break point here.
    });
    _this.state = {
      value: null
    };
    return _this;
  }

  (0, _createClass2.default)(Square, [{
    key: "render",
    value: function render() {
      return _react.default.createElement("button", {
        className: "square",
        onClick: this.click
      }, this.props.value);
    }
  }]);
  return Square;
}(_react.default.Component);

由于 React.js 的内部结构(特别是它包装事件的方式),在调用处理程序时,this未定义。如果你查看调用堆栈,你会发现executeDispatch calls invokeGuardedCallbackAndCatchFirstError明确值为undefined为了context对象最终的价值this在回调里面。当你编写代码时,React 和 Babel 会尝试向你隐藏所有这些,但它们无法完全向调试器隐藏这些,特别是在以下方面:this,所以这种情况你得去实际的代码中看看需要参考_this在调试器中。

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

Chrome、Firefox 调试器未在 React 应用程序中显示“this”的正确值 的相关文章

  • Web Worker 中的 RequireJS

    我正在尝试在网络工作者中使用 RequireJS 问题是我在使用它时不断收到以下错误 Uncaught Error importScripts failed for underscore at lib underscore js 我已经测试
  • 裁剪响应式全宽图像

    我必须剪辑跨越整个宽度的图像 以下事情对我不起作用 剪辑 这需要绝对位置 因此块元素不会堆叠在下面 背景位置 缩放时无法正确剪辑 放大时剪辑的部分会增加 反之亦然 包装器 包装器高度取决于浏览器宽度 因此其值应该是动态的 我使用了 seti
  • 由表达式文字生成的正则表达式是否共享单个实例?

    以下代码片段 来自 Crockford 的Javascript 好的部分 演示了由正则表达式文字创建的 RegExp 对象共享单个实例 function make a matcher return a gi var x make a mat
  • 如何使用 file:///F:/foldername 访问 ajax 中的本地文件夹?但它适用于 http://

    在这里 我使用以下代码使用 AJAX jQuery 动态创建文件名列表 window load function var fileExt csv document ready function ajax url file F foldern
  • 为什么此 Firebase 可调用函数不返回值?

    我有一个应返回值的可调用函数 但唯一返回的是 null 以下是该功能的当前版本 我也尝试过回报第一个承诺 原来的once调用 最后在另一个then返回 GUID 在这种情况下它实际上返回了数据 但它立即返回并且 GUID 为空 我怎样才能实
  • Xml、xsl Javascript 排序

    我正在寻找一种使用 javascript 对 xml 数据进行排序的方法 并希望最终过滤掉数据 我知道这一切都可以在 xsl 文件中实现 但我想在客户端进行 我已经搜索了多个使用 javascript 进行排序的地方 但其中大部分要么太特定
  • JavaScript 语法是什么:{Ci, CC}? [复制]

    这个问题在这里已经有答案了 我正在做一些 FF 附加开发 我看到这样的语法 var Cc Ci require chrome 只是好奇这个语法是什么 以及它是否对 FF 开发或其他东西有特殊意义 这称为解构赋值 它的一个特点是JavaScr
  • 使用 JSONP 时出现“无效标签”?

    我的 JSONP 请求有问题 数据不会显示 Firebug 显示 无效标签 错误 我的 JavaScript ajax url link dataType jsonp beforeSend function xhr var base64 b
  • 如何在模态窗口中显示pdf? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个模式窗口 其中包含锚文本 当我单击此链接时 它必须调用其他位置的 pdf 并将其显示在弹出窗口中 我怎样才能做到这一点 请帮忙
  • 从 mvc web api httpresponse 生成 csv 并通过 angularjs 接收以供下载

    我正在尝试从我的 Web api 生成一个 CSV 文件并通过 angularjs 接收该文件 我有一个如下所示的 API 控制器 HttpPost public HttpResponseMessage GenerateCSV FieldP
  • 当 foreach 块的内容具有 Conditional 属性时,C# 编译器是否会对其进行优化?

    我正在工作中编写一些调试代码 我想知道我所做的是否会损害性能 让我们看一下代码 foreach var item in aCollection Debug WriteLine item Name 我知道 Debug 类使用 Conditio
  • xhr 响应 for 循环不起作用

    我有 xhr 和 for 循环 它的工作非常罕见 for var i 0 i lt this files length i var xhr new XMLHttpRequest xhr upload onprogress function
  • 防止 Firefox Web 通知自动关闭

    我已经在 Firefox 中将 Web 通知与服务器发送的 DOM 事件结合使用 不幸的是 通知在大约两到三秒后消失 我更喜欢 Chrome 的方法 即让消息保持可见 在任何给定时间最多显示三个 直到用户单击通知 这是我所拥有的 windo
  • 无法使用 Excel JavaScript API 设置 NumberFormat

    我正在使用 Excel Javascript API 在搜索文档后 仍然找不到我想要实现的解决方案 因此 我想将所有内容设置为数字格式 文本 这样 Excel 的自动格式设置就不会与任何单元格的内容混淆 不会删除前导零或更改日期格式 文档建
  • 以编程方式在 Highcharts 中使用缩放绘制矩形和线条

    我正在使用 Highcharts 进行一些编程绘图Highcharts Renderer http api highcharts com highcharts Renderer using path and rect 在下面的代码中 我手动
  • Web 文本编辑器中的 RTF 格式

    网络上是否有支持 RTF 格式文档输入的文本编辑器 我知道这对 webdev 来说有点奇怪 但我需要从数据库中读取 RTF 文档 并在基于 Web 的文本编辑器中对其进行编辑 然后将其存储回 RTF 中 在我在转换工具上投入太多资金之前 我
  • 单击行内的按钮时防止触发表行 onclick 事件

    我有一个带有 ONCLICK 事件的表行 切换下面的附加数据 在其中一个行单元格内有一个按钮 单击时执行 AJAX 操作 当我单击按钮时 行的 onclick 事件也会触发 并且会发生附加数据在 AJAX 调用完成之前出现 这对我来说是一个
  • 将 async 和await 与export const 一起使用

    我无法完成这项工作 它说 await 是一个保留字 是的 当然是 而且我想使用它 怎么了 export const loginWithToken async gt return dispatch gt dispatch type SESSI
  • 如何阻止用户重复单击 jQuery AJAX 调用?

    我有一个包含以下脚本的网页 JavaScript function LinkClicked var stage this id var stop ContentPlaceHolderMenu txtDate val var nDays Co
  • 电子节点集成不起作用,也普遍奇怪的电子行为[重复]

    这个问题在这里已经有答案了 我是 Electron 的新手 我一直在努力让它工作 我遇到了无法解释的行为 所以这里有一个总结 我无法让 Electron 和 html 之间的通信正常工作 即使我有nodeIntegration true 网

随机推荐

  • 在 .NET 中存储数据的方法

    我正在寻找在 NET 中的 Windows 窗体应用程序中存储数据的方法 我想让系统的输入数据持久化 因此当我关闭程序并再次打开它时 会检索数据 除了创建链接数据库之外 还有哪些方法可以实现此目的 我们很高兴地赞赏这些例子 有数十种不同的方
  • 尝试安装 HAXM 时出错 - Intel VT-x 已关闭

    我已经安装了 Android Studio 但在尝试安装 HAXM 时收到此错误 我尝试在BIOS中启用虚拟化 但并没有解决问题 然后我在 Windows 8 1 64 位 中禁用了 Hyper V 重新启动计算机后 没有任何变化 并且由于
  • 融合类型中的 C++ 类

    我希望为一堆 C 类实现 python 包装器 在 pxd 的某个地方我有 cdef cppclass FooImpl1 FooImpl1 int foo cdef cppclass FooImpl2 FooImpl2 int foo 我想
  • 在 EL 表达式中使用多个布尔条件

    我想知道如何在 EL 中组合多个布尔条件 我有以下示例 但它不起作用
  • 使用 JNI 访问我的共享库时出现“未定义的引用”

    我正在尝试构建一个版本Botan 加密算法库 使用 JNI 在 Android 上运行一些本机 C 程序 我已经使用 NDK 工具链 NDK R5b 成功创建了 libbotan so 没有任何错误 但是 当我从 Android 项目 示例
  • Select2 - 搜索通配符匹配项

    我正在使用 Select2 来设计我的选择框并添加功能 我想知道如何使搜索规则更加宽松 目前 如果我在下拉列表中有 新墨西哥 我可以搜索 墨西哥 或 新墨西哥 来匹配选择选项 但如果我输入 墨西哥新 我会得到 找不到结果 有没有办法扩展搜索
  • 使用 Meteor 动态加载每个模板的 JS/CSS

    我理解几个问题 即this 这种性质已经发布 但尚未找到可靠的解决方案 从表面上看 Meteor 目前缺乏动态加载 渲染不同 UI JavaScript 的能力 即uilang 或每个模板的 CSS 文件 在我的应用程序中 我的模板需要特定
  • Visual Studio 2005 和 .Net 框架 1.1

    是否可以使用 Visual Studio 2005 创建和维护 Net Framework 1 1 应用程序 实际上有一个 MSBuild 扩展允许这种情况 它被称为MSBee您可以在 CodePlex 上找到它 MSBuild Extra
  • Java和无符号字节[重复]

    这个问题在这里已经有答案了 我需要使用无符号字节数组 我需要通过网络将某些字符发送到服务器 其中一些字符大于 127 我有下面代码的简化版本来尝试理解这个概念 int i 160 byte j byte i System out print
  • 如何在VB中从数组元素中得出所有可能的总和组合

    如果有一个数组 其中元素为 1 2 3 4 则程序应返回另一个数组 其中包含所有组合的总和 1 2 3 4 3 1 2 4 1 3 5 1 4 5 2 3 6 2 4 7 3 4 6 1 2 3 7 1 2 4 8 1 3 4 9 2 3
  • 无法使用 Oreo android 更改我的应用程序的语言

    EDIT 我使用了区域设置更改的解决方案来更改应用程序的语言 但它在奥利奥中不起作用 它在我的三星 S4 上运行良好 但在我的 S9 上运行不佳 所以我正在像这样进行区域设置更改 public void initAppLanguages C
  • “类型错误:没有编码的字符串参数”,但字符串已编码?

    我正在努力转换现有计划从Python2到Python3 该程序中的方法之一通过远程服务器对用户进行身份验证 它将提示用户输入密码 def handshake self timestamp int time time token md5has
  • 我们可以将电子邮件 ID 作为 Firebase 数据库中的键吗? [复制]

    这个问题在这里已经有答案了 我想创建一个登录系统 当用户登录时 基于 在登录用户的电子邮件 ID 上 我想检索 EID 我想要的 JSON 结构是 email protected EID 0153 S email protected EID
  • ggplot2:如何绘制正交回归线?

    我已经在两项不同的视觉感知测试中对大量参与者进行了测试 现在 我想看看这两项测试的表现有多大程度的相关性 为了可视化相关性 我使用 R 绘制了散点图ggplot 我拟合了一条回归线 使用stat smooth 然而 由于我的两个x and
  • 传递匿名函数作为参数

    为什么以下工作有效 foo lt function x x curve foo plots the identity function between 0 and 1 这并不 curve function x x 曲线错误 函数 x exp
  • Android:仅适用于非数字字符的输入类型

    我有一个 EditText 我想让用户仅输入非数字字符 例如 A Z 或 a z 有没有办法做到这一点 我使用的所有组合 文本 文本用户名等 都允许用户选择数字 我认为您必须编写自己的 InputFilter 并将其添加到 EditText
  • 从 Active Directory 组获取用户

    我创建了一个 Active Directory 域名 ADDOMAIN2 其组名为 CommonUsers 有 8 个用户 但是当我对 CommonUsers 组中的用户进行目录搜索时 它返回零结果 她是我的代码 DirectorySear
  • countplot() 与频率

    我有一个 Pandas DataFrame 其中有一列名为 AXLES 它可以采用 3 12 之间的整数值 我正在尝试使用 Seaborn 的 countplot 选项来实现以下绘图 左 y 轴显示这些值在数据中出现的频率 轴延伸范围为 0
  • XML 中的 PHP 代码?

    是否可以将 PHP 代码放入 XML 文档中以便稍后执行 例如 我可以说
  • Chrome、Firefox 调试器未在 React 应用程序中显示“this”的正确值

    这是 React 组件类中的一些代码 使用 CRA 2 搭建脚手架 click gt console log this hello let x 1 1 This is just here to let chrome put a break