我最近得知在render函数中使用bind(this)不好,因为它每次都会创建全新的函数。因此,我正在转向使用箭头函数,如下所示,在两个
我最近得知在render函数中使用bind(this)不好,因为它每次都会创建全新的函数。因此,我正在转向使用箭头函数,如下所示,在两个
有没有办法将这个转换为ES6/7格式?
是的,您可以使用箭头函数来编写如下代码:
resources.map(resource => {
return (
<div key={resource.id}>
<div style={{fontWeight: "bold"}}>{resource.name}</div>
<div>({resource.info})</div>
</div>
)
})
我完全可以去掉 .bind(this),但我的代码仍能正常工作。为什么?
因为在 map 函数的主体中,您没有使用 this
关键字,这意味着如果您尝试访问任何类属性或方法而没有绑定回调方法,它将会抛出错误。
尝试一下:去掉绑定并尝试在 map 函数的主体中访问状态值,它将会抛出错误。
this
时,箭头函数更高效,因为该函数不会被重新创建。然而,如果我在 map 函数体中不使用this
,那么我可以省略.bind(this)
,两种方法的效率几乎相同,是吗? - kojow7this
,则可以省略.bind(this)
和箭头函数。就重新创建函数而言,据我所知,箭头函数会在每次重新渲染时创建新的函数。如果要避免这种情况,请像这样编写:resources.map(this._functionName)
并在构造函数中绑定此方法,现在只有一个引用存在。 - Mayank ShuklaonClick={(e) => this.handleClick(e)}
的说明。这种语法的问题在于每次组件渲染时都会创建一个不同的回调函数。链接(页面最后一段) - Mayank Shukla