javascript - ReactJS - this.functionname 不是函数

标签 javascript reactjs this

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

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

更新:

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

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

但是没有快乐,有什么想法吗?

最佳答案

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

异步回调应该调用 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/

相关文章:

jQuery 如果元素在类字符串中具有类

javascript - 在类创建的对象上返回未定义

javascript - 循环结束后重启 jQuery.each()

javascript - 文件名中 $Revision$ 的 IE6 Javascript 问题

javascript - 使用 react 按钮更改传单 basemap

reactjs - 在 react ssr 应用程序中调用 firebase 消息传递方法时未定义如何修复自身?

javascript - Firefox - 如何列出已安装的扩展并在列表中识别它们?

javascript - 如何隐藏div html?

javascript - Reactjs 在 for 循环结束之前不会渲染

java - Java中的 'this'变量实际上是如何设置为当前对象的?