React异步状态更新setState参数(函数与非函数)

时间:2020-07-08 03:56:15

标签: reactjs

在有关状态和生命周期方法的官方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
}));

很难想象“错误”方式可能会导致问题。什么是“错误”方式会导致错误的代码示例?

1 个答案:

答案 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

Demo