我正在尝试通过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 未安装的组件。这是一个无操作。
这一切都有效,但是它向浏览器控制台发送了我不想要的错误消息。以正确的方式运作这种方法的正确方法是什么?
答案 0 :(得分:0)
卸载组件后回调结算时可能会发生这种情况。要避免此行为,您必须跟踪组件是否仍然已挂载。这可以通过在挂载时将标志设置为true
然后在卸载时设置为false
来完成。 More info here.