【发布时间】:2020-04-15 13:46:49
【问题描述】:
我有以下情况
export default class MyComponent extends Component {
myFunc = dynamicKey => {
// do something with the dynamic key
}
render() {
return (
<Foo>
<button onClick={e => this.myFunc(someDynamicKey1)} />
<button onClick={e => this.myFunc(someDynamicKey2)} />
<button onClick={e => this.myFunc(someDynamicKey3)} />
{/* ... */}
</Foo>
)
}
}
这是一个非常常见的情况,但它并不好,因为在每次渲染时它都会创建箭头函数。
因此,作为一种解决方法,我创建了一个函数,该函数使用该键返回另一个函数。
export default class MyComponent extends Component {
myFunc = dynamicKey => e => {
// do something with the dynamic key
}
render() {
return (
<Foo>
<button onClick={this.myFunc(someDynamicKey1)} />
<button onClick={this.myFunc(someDynamicKey2)} />
<button onClick={this.myFunc(someDynamicKey3)} />
{/* ... */}
</Foo>
)
}
}
现在我不是在每次渲染时都创建一个新函数,而是在每次渲染时调用一个新函数。
现在我不确定该使用哪一个。在每次渲染时调用一个函数是一种不好的做法吗?我应该使用箭头函数吗?
【问题讨论】:
-
您可能想阅读这个问题stackoverflow.com/questions/29810914/…
-
与代码中的这种差异相比,呈现本身(更新 DOM)更加耗时。而且很可能是 JS 解析器无论如何都会优化这段代码,所以实际上并不是每次都创建就地回调函数。所以我想说:不要担心这个,除非你能测量出时间上的差异。
-
@AtinSingh 这是一个很好的阅读问题,但不幸的是不是我的情况。我不能制作子对象,因为它只是一个按钮。创建一个只处理它的包装器会很奇怪。
-
@AtinSingh 我刚刚编辑了我的问题,所以它看起来更真实,更好地展示了我所处的情况。
-
我很困惑,为什么您要在该组件中单击三个按钮来访问相同的功能?难道你不能只拥有一个函数,然后动态地将密钥传递给该函数吗?如果你能解释一下,那会有所帮助。我通常这样做的方式是这样的:onClick={this.myFunc.bind(this)}。这样我就不会创建箭头函数。
标签: javascript reactjs arrow-functions