React 更新函数之把一系列 state 更新加入队列

57 阅读1分钟

把一系列 state 更新加入队列

今天看 react 官网发现看到一个更新函数问题

setState(n => n + 1)

这里的 n => n + 1 被称为更新函数。当你将它传递给一个 state 设置函数时:

1.React 会将此函数加入队列,以便在事件处理函数中的所有其他代码运行后进行处理

2.在下一次渲染期间,React 会遍历队列并给你更新之后的最终 state

setCount(n => n + 1);
setCount(n => n + 1);
setCount(n => n + 1);

React 在执行事件处理函数时处理这几行代码的过程:

1.setCount(n => n + 1) : n => n + 1 是一个函数。React 将它加入队列。

2.setCount(n => n + 1) : n => n + 1 是一个函数。React 将它加入队列。

3.setCount(n => n + 1) : n => n + 1 是一个函数。React 将它加入队列。

当你在下次渲染期间调用 useState 时,React 会遍历队列。之前的 state 的值是 0,所以这就是 React 作为参数 n 传递给第一个更新函数的值。然后 React 会获取你上一个更新函数的返回值,并将其作为 n 传递给下一个更新函数,以此类推

事件处理函数执行完成后,React 将触发重新渲染。在重新渲染期间,React 将处理队列。更新函数会在渲染期间执行,因此 更新函数必须是 纯函数 并且只返回结果。不要尝试从他们内部设置 state 或者执行其他副作用。

要在一个事件中多次更新某些 state,你可以使用 setNumber(n => n + 1) 更新函数。