我有下课,但我对此处的绑定感到困惑。这个类没有构造函数和super(),为什么他需要在setAll方法上绑定它?我删除了绑定,应用程序仍然工作,没有错误。
class PushScheduleActions {
/**
* Request all API
*/
fetchAll(params) {
return dispatch => {
dispatch(params);
PushScheduleApi.getAll(params)
.then(this.setAll.bind(this));//why use bind this here?
.catch(this.setError.bind(this));
}
}
setAll(data) {
return data;
}
}
答案 0 :(得分:1)
构造函数,超级和绑定之间没有关系。
什么绑定呢? 它返回一个新函数,并传递了上下文用户。
在你的情况下,PushScheduleApi成功案例是你传递一个由bind方法返回的新setAll函数。
由于您的setAll功能不使用上下文,因此您无需传递上下文。
dispatch是一个箭头函数,因此继承了上下文。所以你不需要绑定方法。你可以简单地使用this.setAll
答案 1 :(得分:0)
bind()函数创建一个新的绑定函数(BF)。 BF是一个外来函数对象(来自 ECMAScript 2015 的术语),它包装了原始函数对象。通常调用BF会导致执行包装函数。
有关详细信息,请点击此链接,我希望它能帮助您理解 bind()方法 Use of the JavaScript 'bind' method
答案 2 :(得分:0)
班级没有构造函数和super()
这完全无关紧要。
为什么他需要在setAll方法上绑定它?
只有在
时才需要绑定方法this
和this
应该引用this
内部fetchAll
引用的内容(可能是PushScheduleActions
的实例)。由于setAll
没有引用this
,因此没有理由绑定。
但是,整个setAll
方法是不必要的。没有.then(this.setAll.bind(this))
,代码将完全相同。这让我觉得PushScheduleActions
应该是子类,而子类应该覆盖setAll
。现在,孩子班' setAll
可能会使用this
并期望它引用该实例。由于父类(PushScheduleActions
)无法知道,绑定方法更安全,因为它将确保setAll
的子类实现无论是否使用this
或不