多个绑定此(缩短代码)

时间:2018-07-13 15:28:08

标签: reactjs ecmascript-6 this bind

多个> 4(约10个)函数,在构造函数中将其绑定。 有没有办法缩短代码?

constructor(props: SignupProps) {
    super(props);
    this._setDirty = this._setDirty.bind(this);
    this._handleUserInput = this._handleUserInput.bind(this);
    this._A = this._A.bind(this);
    this._B = this._B.bind(this);
}

我尝试了以下操作,但是不能。

 [this._setDirty, _this.handleUserInput, this._A, this._B].bind(this);

2 个答案:

答案 0 :(得分:1)

您需要对方法进行循环,并在每次迭代中调用.bind,以使方法可行。例如:

const methods = ['_setDirty', '_a', '_b', ...];
methods.forEach(method => this[method] = this[method].bind(this));

答案 1 :(得分:1)

方法应该分配一个循环(另一个答案已经提到):

for (const prop of ['_setDirty', /* ... */])
  this[prop] = this[prop].bind(this);

使用箭头代替原型方法可以跳过bind,但这是bound prototype methods are generally preferable的唯一好处,因为它们具有灵活性。

由于使用了React,因此可以安全地假定还使用了Transpiler,因此该项目不仅限于ES6。

装饰器可以方便地在ES中使用.Next代码绑定方法,例如bind-decorator

import bind from 'bind-decorator';

...
constructor(props: SignupProps) {
    super(props);
}

@bind
_setDirty() {...}
...