我们应该避免在render内部绑定方法,因为在重新渲染过程中它将创建新方法而不是使用旧方法,这会影响性能。
所以对于这样的场景:
<input onChange = { this._handleChange.bind(this) } ...../>
我们可以_handleChange
在构造函数中绑定方法:
this._handleChange = this._handleChange.bind(this);
或者我们可以使用属性初始化器语法:
_handleChange = () => {....}
现在让我们考虑一下要传递一些额外参数的情况,比如说在一个简单的todo应用中,项目的onclick我需要从数组中删除该项目,为此我需要在每个项目中传递项目索引或todo名称onClick方法:
todos.map(el => <div key={el} onClick={this._deleteTodo.bind(this, el)}> {el} </div>)
现在,仅假定待办事项名称是唯一的。
根据DOC:
这种语法的问题在于,每次渲染组件时都会创建一个不同的回调。
题:
如何避免这种在render方法中进行绑定的方式,或者有什么替代方法?
请提供任何参考或示例,谢谢。
文档鼓励使用数据属性并从以下位置访问它们
evt.target.dataset
:Also note that this makes sense only when you have performance issues: