我的componentDidMount中有一个侦听器设置:

updateBasketTotal: function() {
    BasketService.getBasketTotal(function(data){
        this.setState({
            selectedPeopleCount: data.TotalMembers
        });
    }.bind(this));
},

componentDidMount: function() {
    this.updateBasketTotal();
    this.subscribeToChannel(basketChannel,"selectAll",this.listenerSelectAll);
    this.subscribeToChannel(basketChannel,"removePersonFromBasket",this.listenerRemovePersonFromBasket);
    this.subscribeToChannel(basketChannel,"addPersonToBasket",this.listenerAddPersonToBasket);
    this.subscribeToChannel(basketChannel,"addArrayToBasket",this.listenerAddArrayToBasket);
},

listenerAddArrayToBasket: function(data){
    BasketService.addPerson(data.arrayToPush,function(){
        this.updateBasketTotal();
    });
},
listenerAddPersonToBasket: function(data){
    BasketService.addPerson(data.personId,function(){
        this.updateBasketTotal();
    });
},
listenerRemovePersonFromBasket: function(data){
    BasketService.removePerson(data.personId,function(){
       this.updateBasketTotal();
    });
},
listenerSelectAll: function(data){
    BasketService.selectAll(data.selectAll, function () {
        this.updateBasketTotal();
    });
}


但是,如果我不在此页面上时发布消息,则会收到错误消息:

this.updateBasketTotal不是函数

谁能告诉我如何使用this.updateBasketTotal?

我认为这是“问题”的问题,但不确定如何解决。提前致谢

更新:

尝试将bind()添加到侦听器:

    listenerAddPersonToBasket: function(data){
    BasketService.addPerson(data.personId,function(){
        this.updateBasketTotal();
    }.bind());
},


但是没有喜悦,有什么想法吗?

最佳答案

我假设您的组件正在退订componentWillUnmount中的那些频道,以避免资源泄漏和重复的订阅。

异步回调应调用isMounted以确保在尝试任何其他操作之前仍可装入该组件。

BasketService.selectAll(data.selectAll, function () {
    if (this.isMounted()) {
        this.updateBasketTotal();
    }
}.bind(this));


我不知道isMounted检查是否可以解决您的问题,因为那可能也不再是一个功能。如果不是,则可以考虑添加自己的属性以跟踪组件是否已安装,并检查是否调用了函数。

关于javascript - ReactJS-this.functionname不是一个函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31740875/

10-12 00:12
查看更多