When an event handler uses this
(juet like handleClick
below uses this.setState
), you have to bind the event handler with this
kerword.否则,您需要使用 箭头功能。
例如
//This function isn't bound whilst using "this" keyword inside of it.
//Still, it works because it uses an arrow function
handleClick = () => {
this.setState({
isClicked:true
});
}
render() {
return (
<div className="App">
<button onClick={this.handleClick}>Click</button>
</div>
);
}
但是,使用上述方法,您不能传递参数。你需要使用…
bind(this, param)
函数后- 匿名箭头函数
IE
<button onClick={this.handleClick}>Click</button>
will be
<button onClick={this.handleClick.bind(this, 111)}>Click</button>
or
<button onClick={() => this.handleClick(111)}>Click</button>
这是问题。
将参数传递给事件处理程序的最有效方法是什么?
根据 官方文档,使用 bind()
会破坏性能,因为…
在 render 中使用 Function.prototype.bind 会在每次组件渲染时创建一个新函数
使用匿名箭头函数也是如此。医生说…
在渲染中使用箭头函数会在每次组件渲染时创建一个新函数
那么,传递参数的最有效方式是什么?
任何输入将不胜感激。
聚苯乙烯
有人问 param
是如何确定的。这将动态确定(即不总是 111
)。因此,它可以来自状态、道具或此类中定义的其他一些函数。
原文由 Hiroki 发布,翻译遵循 CC BY-SA 4.0 许可协议
我已经在我的另一篇文章中解释过了: click event in react component 。
如果您担心其性能,请不要使用内联箭头函数。您仍然可以使用公共类方法并绑定上下文
this
。您可以像这样传递任何您喜欢的参数:
根据 devserkan 的评论,
不,它没有。请参阅 文档 中的说明:
如果此回调作为 prop 传递给较低的组件,则这些组件可能会进行额外的重新渲染。我们通常建议在构造函数中绑定或使用 类字段语法,以避免此类性能问题。
另外,请参阅某些性能 的答案 下方来自 bigga-hd 的评论:
避免在渲染中声明箭头函数或绑定以获得最佳性能。在渲染之外声明您的函数。每个渲染器上不再分配函数。
您可以像这样调用该方法:
PS:我没有将这篇文章标记为重复,因为问题范围明显不同。因此,只需链接帖子即可让您深入了解更多细节。