Meteor和React - Componentdidmount,多个Meteor.calls和setstate

时间:2018-01-18 18:16:36

标签: javascript reactjs meteor setstate

我正在尝试通过meteor调用获取特定的用户详细信息(出于安全原因需要在服务器端获取)并将结果设置为状态。我现在正在尝试的是:

componentDidMount(){
    Meteor.call('getCurrentCF', this.state.currentAccount, (err, res) => {
        if (!err) {
            var result = JSON.parse(res.content);
            if (typeof result.cfu['destinations'] != 'undefined') {

                if(result.cfu['destinations'][0].destination === "voicebox") {
                    this.setState({
                        cfActive: 'btn btn-block btn-maik',
                        vbActive: 'btn btn-block btn-maik-active',
                    });
                } else {
                    this.setState({
                        cfActive: 'btn btn-block btn-maik-active',
                        vbActive: 'btn btn-block btn-maik',
                        currentCFDest: "(" + result.cfu['destinations'][0].simple_destination + ")",
                    });
                }

            } else {
                this.setState({
                    cfActive: 'btn btn-block btn-maik',
                    vbActive: 'btn btn-block btn-maik',
                });
            }
        } else {
            console.log("Error: " + err);
        }
    });

    Meteor.call('getCurrentVM', this.state.currentAccount, (err, res) => {
        if(!err) {
            var vms = JSON.parse(res.content);

            this.setState({
                vmCount: vms.total_count,
            });
        } else {
            console.log(err)
        }
    });

    this.setState({
        isLoading: false,
    });
}

但是在尝试这个时,我得到一个控制台错误消息:

  

警告:只能更新已安装或安装的组件。这通常   表示你在一个上调用了setState,replaceState或forceUpdate   未安装的组件。这是一个无操作。

这一切都有效,但是它向浏览器控制台发送了我不想要的错误消息。以正确的方式运作这种方法的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

卸载组件后回调结算时可能会发生这种情况。要避免此行为,您必须跟踪组件是否仍然已挂载。这可以通过在挂载时将标志设置为true然后在卸载时设置为false来完成。 More info here.