假设我有一个组件,其商店使用的方法作为回调,如下所示:
MyComponent = React.createClass({
componentDidMount: function() {
MyStore.addLoginListener(this.userHasAuthenticated);
},
render: function(){
return <div>Hello</div>
},
userHasAuthenticated: function(){
this.setState({
user: MyStore.getUser()
});
}
});
我将拥有MyStore
addLoginListener: function(callback) {
this.on(MessageConstants.LOGIN, callback);
}
这非常有效,MyComponent实际上对商店更改做出了反应。问题是,我想用动态回调来做到这一点:
# MyComponent
componentDidMount: function() {
this.bindMethods();
MyStore.addLoginListener(this.userHasAuthenticated.bind(this)); // bind this so taht the callback will be evaluated to native code
},
bindMethods: function() {
if(/* logic checks */){
this['userHasAuthenticated'] = function(){
this.setState({
dynamicKey: dynamicMethod()
});
// this should evalutae to the same as the example above
}
}
},
这不再适用了。手动调用动态方法可以正常工作,但在商店中使用它作为回调会触发错误:我得到
TypeError: this.on is not a function
因此,该方法似乎不是由商店评估的(它是未经实例化的)。如果我从this.userHasAuthenticated.bind(this)中删除bind(this),结果是一样的吗?任何的想法?谢谢!