使用动态回调方法React Store

时间:2016-03-08 15:36:16

标签: javascript reactjs callback

假设我有一个组件,其商店使用的方法作为回调,如下所示:

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),结果是一样的吗?任何的想法?谢谢!

0 个答案:

没有答案