React 异步渲染机制

react 官网渲染讲解:

https://zh-hans.react.dev/learn/render-and-commit

1. 异步状态更新

React 将状态更新标记为需要更新,但并不会立即执行。这是为了优化性能,通过批量处理状态更新和减少渲染次数来提升应用的响应速度。

2. 更新队列

当你调用 setVisible 时,React 并不会立刻更新状态并重新渲染组件。相反,React 会将状态更新放入一个队列中,并在下一个事件循环(即下一次渲染周期)中处理这些更新。

3. 影响的渲染

这意味着,在调用 setVisible 后,当前组件的渲染仍然会使用旧的状态值。在你下一次访问状态时(例如在 console.log 中或直接在组件中使用),它会反映最新的状态值,但在当前渲染周期中仍然是旧值。

csharp 复制代码
const [visible, setVisible] = useState(false);

const toggleVisibility = () => {
  setVisible(!visible); // 此时更新状态,但 visible 仍然是旧值
  console.log(visible); // 这里会输出旧值
};

4.解决方法

如果你需要在状态变化后立即执行某些操作,建议使用 useEffect 监控状态:

csharp 复制代码
useEffect(() => {
  console.log('Visible has changed:', visible); // 这里会输出更新后的值
}, [visible]);
相关推荐
哆啦A梦158821 分钟前
商城后台管理系统 03 登录布局
javascript·vue.js·elementui
曼巴UE51 小时前
UE FString, FName ,FText 三者转换,再次学习,官方文档理解
服务器·前端·javascript
selt7911 小时前
Redisson之RedissonLock源码完全解析
android·java·javascript
行走的陀螺仪2 小时前
高级前端 Input 公共组件设计方案(Vue3 + TypeScript)
前端·javascript·typescript·vue·组件设计方案
一颗不甘坠落的流星2 小时前
【Antd】基于 Upload 组件,导入Json文件并转换为Json数据
前端·javascript·json
LYFlied2 小时前
Vue2 与 Vue3 虚拟DOM更新原理深度解析
前端·javascript·vue.js·虚拟dom
Lucky_Turtle2 小时前
【Node】npm install报错npm error Cannot read properties of null (reading ‘matches‘)
前端·npm·node.js
小飞侠在吗2 小时前
vue shallowRef 与 shallowReacitive
前端·javascript·vue.js
惜分飞3 小时前
sql server 事务日志备份异常恢复案例---惜分飞
前端·数据库·php