在 React文档中有很多地方说 React 可能会将一批状态更改排队,并在以后执行所有更改。
反应组件文档
setState() 将更改排队到组件状态并告诉 React 此组件及其子组件需要使用 已更新状态。这是用于更新用户的主要方法 响应事件处理程序和服务器响应的接口。
将 setState() 视为一个请求,而不是一个直接命令 更新组件。为了获得更好的感知性能,React 可能会 延迟它,然后在一次传递中更新多个组件。反应 不保证立即应用状态更改。
setState() 并不总是立即更新组件。它可能会 批处理或推迟更新,直到以后。这使得阅读这个状态 在调用 setState() 之后,这是一个潜在的陷阱。相反,请使用 componentDidUpdate 或 setState 回调 (setState(updater, 回调)),其中任何一个都保证在更新后触发 已应用。如果需要根据上一个设置状态 状态,请阅读下面的更新程序参数。
反应钩子 API 参考
基本钩子 - 使用状态
const [state, setState] = useState(initialState);
返回一个有状态值和一个用于更新它的函数。
在初始渲染期间,返回的状态(状态)与 作为第一个参数 (初始状态) 传递的值。
setState 函数用于更新状态。它接受一个新的 状态值,并将组件的重新呈现排队。
问题1
我的问题是:无论 React 决定排队对单个批次执行多少状态更新,我是否可以依赖下一个渲染将使用自上次渲染以来排队的所有更新的最新状态?
问题2
我可以依赖 React 决定排队的那些状态更改的顺序吗?我的意思是,如果我setState({a:1})
然后setState({a:2})
我能确定我的状态的最终值将是2
?
问题 1:不,React 只能渲染(例如)更新队列的一半,然后是另一个。
问题2:是的。处理更新的顺序可能不像您调用setState
的顺序那么简单,但最终,广告顺序决定了您所在状态的最新版本。
反应代码中的详细说明。