当前位置: 首页 > 面试题库 >

反应:onClick处理程序在每个渲染上都被调用?

朱海超
2023-03-14
问题内容

我正在学习React,并按照本教程创建了一个简单的Tic-
Tac-Toe游戏,您可以在CodePen中查看。

对于在Board组件onClickrenderSquare函数内部返回的Square组件的属性中的箭头功能如何工作,我感到困惑onClick={() => this.props.onClick(i)}。同样,我拥有的游戏组件也同样如此onClick={ (i) => this.handleClick(i)}。我以为我可以不用箭头功能(就像一样onClick={this.handleClick(i)})来编写它,但这会中断游戏。


问题答案:

onClick期望功能。箭头函数没有自己的功能this; 使用this封闭执行上下文的值。箭头功能可替代以下功能

onClick={this.handleClick.bind(this,i)}

当您像这样运行时它不起作用

onClick={this.handleClick(i)}

因为在这种情况下,它将调用一个函数,并且将传递一个返回值,该值将在每次调用render时进行评估。因此,如果您在onClick函数中执行某些操作导致例如重新渲染,则setState您的应用程序将陷入无限循环。因此onClick需要一个函数而不是一个值,因此除非您从onClick处理程序中返回一个函数,否则不应直接调用它。

上面的Arrow函数执行将参数绑定到函数的作用



 类似资料:
  • 问题内容: 每次调用时,React都会重新渲染所有组件和子组件吗? 如果是这样,为什么?我以为这个想法是,当状态改变时,React只能渲染所需的内容。 在下面的简单示例中,尽管onClick处理程序始终将设置为相同的值,但是在随后的单击中状态不会改变,这两个类都在单击文本时再次呈现。 我曾希望只有在数据更改的情况下才会进行渲染。 这是示例代码,例如JS Fiddle和嵌入式代码段: 问题答案: 每

  • 问题内容: 目前,我对新的react hooks API 的用例以及您可能会做的事情感到非常惊讶。 实验时出现的一个问题是,总是创建一个新的处理函数仅在使用时就扔掉是多么昂贵。 考虑以下示例: 尽管我将处理程序包装为,以避免每次渲染新处理程序时都会传递新的处理程序,但仍然必须创建内联箭头函数,而在大多数情况下都必须将其丢弃。 如果我只渲染几个组件,可能没什么大不了的。但是,如果我这样做数千次,对性

  • 我有这个单声道代码: 当validate方法抛出ValidationException时,将同时调用handleValidation异常和handleException。我只希望调用handleValidationException。为什么会发生这种情况?如何防止handleException被调用?

  • 问题内容: 每次调用时,React都会重新渲染所有组件和子组件吗? 如果是这样,为什么?我以为这个想法是,当状态改变时,React只渲染所需的内容。 在下面的简单示例中,尽管onClick处理程序始终将设置为相同的值,但是在随后的单击中状态不会改变,这两个类在单击文本时都再次呈现。 我曾希望只有在数据更改的情况下才会进行渲染。 这是示例代码,例如JS Fiddle和嵌入式代码段: 问题答案: 每次

  • 我希望每次只呈现数组中的三个元素。 每次我将单击em来更改数字。 例如:在屏幕上:123,我点击了在按钮,会出现456和以上。 MyCode:

  • 我有一个反应组件,它是一种形式。当用户单击发送/提交按钮时,将调用一个函数来处理数据保存并执行一些其他任务。 问题是在用户单击按钮后,组件似乎重新渲染了几次(很可能是因为它从其他组件接收的外部道具更新了)。这本身不是问题。 但是,当组件更新时,即使用户没有再次单击该按钮,也会再次调用函数。 这是我不明白的部分。为什么组件更新时会触发< code>onClick函数?我该如何防止这种情况发生? 我不