我可以确定React下次渲染它时会使用最新的状态值吗?

问题描述 投票:2回答:1

React文档中有很多地方,它表示React可以将一批状态更改排入队列,并在以后执行这些更改。

React Component Docs

setState()将对组件状态的更改排入队列,并告诉React需要使用更新后的状态重新呈现此组件及其子组件。这是用于更新用户界面以响应事件处理程序和服务器响应的主要方法。

将setState()视为请求而不是更新组件的立即命令。为了获得更好的感知性能,React可能会延迟它,然后在一次通过中更新几个组件。 React不保证立即应用状态更改。

setState()并不总是立即更新组件。它可以批量推迟更新或推迟更新。这使得在调用setState()之后立即读取this.state是一个潜在的陷阱。相反,使用componentDidUpdate或setState回调(setState(更新程序,回调)),其中任何一个都保证在应用更新后触发。如果需要根据以前的状态设置状态,请阅读下面的updater参数。

React Hooks API Reference

基本钩子 - useState

const [state, setState] = useState(initialState);

返回有状态值,以及更新它的函数。

在初始渲染期间,返回的状态(状态)与作为第一个参数(initialState)传递的值相同。

setState函数用于更新状态。它接受一个新的状态值并将组件重新渲染。

问题1

我的问题是:无论React决定在单个批处理上执行多少次状态更新,我是否可以依赖下一个渲染将使用最新状态的事实以及自上次渲染以来排队的所有更新?

问题2

我可以依赖React决定排队的那些状态更改的顺序吗?我的意思是,如果我setState({a:1})然后setState({a:2})我可以肯定我的州的最终价值将是2

reactjs react-hooks
1个回答
1
投票

问题1:不,React只能渲染(例如)更新队列的一半,然后另一个。

问题2:是的。处理更新的顺序可能不像您调用setState的顺序那么简单,但最后,插入顺序决定了您所在状态的最新版本。

qazxsw poi中的详细解释。

© www.soinside.com 2019 - 2024. All rights reserved.