React:onClick 处理程序在每次渲染时都被调用?

IT技术 reactjs
2021-04-05 01:01:40

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

我对箭头函数如何在 Board 组件onClickrenderSquare函数内部返回的 Square 组件属性中工作感到困惑onClick={() => this.props.onClick(i)}同样,我拥有的 Game 组件也同样如此onClick={ (i) => this.handleClick(i)}我以为我可以在没有箭头函数的情况下编写它(就像onClick={this.handleClick(i)}),但这破坏了游戏。

1个回答

onClick期待一个功能。箭头函数没有自己的this使用this封闭执行上下文值。箭头函数是以下的替代品

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

当你运行它时它不起作用

onClick={this.handleClick(i)} 

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

上面的箭头函数起到将参数绑定到函数的作用

@Icepickle,是的,你是对的,这是我的一个旧答案,没有那个解释,我正在编辑它的更多细节。
2021-05-23 01:01:40
我认为如果不知道handleClick. 当然它符合这个问题,但它真的取决于handleClick函数在做什么
2021-05-30 01:01:40