我的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/