在有关状态和生命周期方法的官方React文档中,“状态更新可能是异步的”部分: https://reactjs.org/docs/state-and-lifecycle.html
他们说在基于先前状态更新状态时,我们应该将一个函数传递给setState()以获取先前状态作为第一个参数:
// Wrong
this.setState({
counter: this.state.counter + this.props.increment,
});
// Correct
this.setState((state, props) => ({
counter: state.counter + props.increment
}));
很难想象“错误”方式可能会导致问题。什么是“错误”方式会导致错误的代码示例?
答案 0 :(得分:1)
对于只有一个呼叫db.Main_Collection.aggregate([
{
"$lookup": {
"from": "Aux_Collection",
"let": {"sourceUID": "$uniqueId"},
"pipeline": [
{
"$match": {
"$expr": {
"$eq": ["$uniqueId", "$$sourceUID"]
}
}
},
{
"$group": {
"_id": null,
"UniqueIPs": {
"$addToSet": "$IPAddr"
},
"TotalIPs": {"$sum": 1}
}
},
],
"as": "ipAddresses"
}
},
{
"$project": {
"uniqueId": 1,
"Message": 1,
"UniqueIPs": {"$size": {"$arrayElemAt": ["$ipAddresses.UniqueIPs", 0]}},
"TotalIPs": {"$arrayElemAt": ["$ipAddresses.TotalIPs", 0]},
}
}
])
这样的情况,没有任何问题。但是,由于React批处理状态会更新,因此不能保证它能正常工作。我可以举一个简单的例子
setState