有很多关于在 ES6 React 中处理绑定的方法的问题/文章,但大多数似乎都没有解决React 文档中概述的问题(强调我的):
我们建议您在构造函数中绑定事件处理程序,以便 每个实例只绑定一次:
constructor(props) { super(props); this.state = {count: props.initialCount}; this.tick = this.tick.bind(this); }
对于上下文,他们建议不要对方法进行内联绑定,例如:
//using .bind()
<div onClick={this.tick.bind(this)}>
// ES6 anon arrow functions
<div onClick={() => this.tick()}>
// ES.Next :: operator
<div onClick={::this.tick}>
当然。但是在构造函数中绑定每个方法的推荐解决方案对于很多方法来说很麻烦,所以我在类级别查看 ES.Next @autobind 装饰器作为一个简单的解决方案:
import { autobind } from 'core-decorators';
@autobind
class Person {
getPerson() {
return this;
}
getPersonAgain() {
return this;
}
}
let person = new Person();
let { getPerson, getPersonAgain } = person;
getPerson() === person;
// true
getPersonAgain() === person;
// true
我想不通的是:这个装饰器会和内联绑定方法有同样的缺点吗?即,每个实例的方法是否只绑定一次?
如果没有,是否有避免这种陷阱的简洁解决方案?