为什么react的setState方法只能获取到上一次的值

博主最近在练习react的小案例的时候发现通过setState设置状态输出到控制台的数据总是获取到上一次输入的值,一直困惑不解,同时又想到在获取表单数据的时候又能准确获取,经过查找才发现,react中setState()是异步的,同时呢在某些情况下又是同步的,下面进行一系列总结。

在 React 中,虽然 `setState` 方法被设计为异步的,但是在某些情况下,收集表单数据并不会受到影响,数据能够被正常获取。这个现象可能是因为:

1. 在合成事件处理函数中,`setState`方法是异步的,但是在 React 处理原生 DOM 事件的时候是同步更新状态的。因此,在原生表单 `onSubmit` 或者 `onChange` 事件中,`setState` 方法就成为了同步的调用方式,即使 React 没有导致 DOM 事件的发生,它也会阻止通过表单 DOM 元素直接访问state的值以及人为固化到输入框上的值,防止页面刷新。
 
2. 可能一些同步代码在执行 `setState` 方法后,会阻止进一步调用,直到 React 将更新的状态同步到组件。这种情况下,虽然 `setState` 方法是异步的,但是下一行代码需要等待方法执行完成。所以也不会出现异步更新后上一次输入的值的情况。

需要注意的是,尽管上述情况下  `setState` 方法能够同步执行,如果在过程中进行了异步操作或者在合成事件处理程序中使用了 `setState` 而不是原生 DOM 事件时,异步更新状态的机制仍然会生效。所以在 React 中使用 `setState` 更新组件状态时,仍然需要遵循 `setState` 异步更新机制的规则。

你可能感兴趣的:(react.js,前端)