当前位置: 首页 > 知识库问答 >
问题:

为什么React Components中的类函数不能访问道具?[重复]

仲孙昊焱
2023-03-14

我遇到了一个大问题,其中有一个函数无法访问react中组件的道具:

renderRow(employee) {
    console.log('props here', this.props); //undefined
}

但是当我把它改成一个胖箭头函数时,它工作得很好

renderRow = (employee) => {
   console.log('props here', this.props); //success?
}

这是为什么呢?我有什么不明白的?

共有3个答案

陈季
2023-03-14

胖箭头函数可以工作,因为箭头函数中的this不会重新绑定,这有助于保持上下文,并且在运行时不会更改。

虽然vanilla中的this总是引用外部作用域,但要在vanilla函数上使用this,您必须使用. bind()方法将其绑定到员工函数

杜英叡
2023-03-14

在第一个示例中,有另一个作用域。

employee是第二个示例中的范围,这就是为什么引用了employee

晏卓君
2023-03-14

为了便于讨论。假设第一个函数是正规函数,第二个函数是箭头函数

首先,让我们了解,对于JS中的每个正常函数执行,JS引擎都会创建自己的执行上下文。然后为每个执行上下文创建一个新的“this”,从而属于该函数

现在,当它与您的案例相关时,第一个函数中的this关键字

renderRow(employee) {
    console.log('props here', this.props); //undefined
}

引用自身(或当前正在调用它的函数),因为JS引擎已经创建了一个引用它的新this对象。因此,当程序运行时,this.props的值将为undefined,因为它未在当前执行上下文中定义(这也是您的renderRow函数)

另一方面JS引擎不会为该箭头函数创建新的。简单地说,箭头函数没有自己的函数,因此在第二个示例中,

renderRow = (employee) => {
   console.log('props here', this.props); //success!!!
}

这指的是外部执行上下文(这是您的React组件),所以现在this.props工作。

有关主题的更多信息,您可以查看这些资源...

这-https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this

箭头功能-https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions

希望这有帮助:)

 类似资料:
  • 我在Java中使用嵌套类时遇到问题,有人知道为什么Java不允许我这样做吗?

  • 问题内容: 我正在编写一个简单的程序来测试基本的GUI。该程序在屏幕中间打印一个字母,并允许用户使用箭头键移动它。一切正常,但是当我尝试在程序开始时将字母居中时,似乎and 函数未返回正确的数字。 这是包含我的Panel类的代码片段 为什么我和函数返回“ 0”? 谢谢你的帮助 问题答案: 我不能说出原因,但: 避免这种情况的一种方法是重写函数并返回您的首选大小。

  • 如果我有一个数据帧并重命名了列,则无法用其新名称访问列。 见示例说明: 现在,如果我按照这里建议的方式重命名列“a”。 现在,让我们尝试使用“newname”访问该列 但我仍然可以使用旧名称访问该列。 似乎我已经更改了列的名义名称,但这种更改并没有传播到数据帧结构中用于区分列的字典中。 问:为什么会发生这种行为,我如何修复它?

  • 我有下面的子组件。道具从父级中的输入选择器更新。为什么 不更新孩子的 家长: 孩子:

  • 伊登 JLS所说的是: 设C是ClassName表示的类。设n是一个整数,使得C是类的第n个词汇封闭类,在该类中出现有条件的this表达式。 [...] 如果当前类不是类C或C本身的内部类,则为编译时错误。 在的情况下,内部类集。这意味着上面的代码应该可以正常工作。发生了什么?