[React]用 flushSync 同步更新 state

参考:使用 ref 操作 DOM -- React 中文文档

同时操作state和ref的情况还是有的,按我的原来的处理肯定是使用setTimeout了,看到官方有解决方案,摘录下来以便查看。

源代码就不完整贴了,直接看问题代码块:

javascript 复制代码
setTodos([ ...todos, newTodo]);
listRef.current.lastChild.scrollIntoView();

在 React 中,state 更新是排队进行的。在这个示例中会导致问题,因为 setTodos 不会立即更新 DOM。因此,当你将列表滚动到最后一个元素时,尚未添加待办事项。这就是为什么滚动总是"落后"一项的原因。

要解决此问题,你可以强制 React 同步更新("刷新")DOM。 为此,从 react-dom 导入 flushSync 并将 state 更新包裹 到 flushSync 调用中:

javascript 复制代码
flushSync(() => {
  setTodos([ ...todos, newTodo]);
});
listRef.current.lastChild.scrollIntoView();
相关推荐
90后的晨仔3 小时前
uni-app 三方库与插件管理体系全解析:从原生开发者视角彻底讲透
前端
程序员爱钓鱼3 小时前
Rust 生命周期案例详解:从编译错误到真实业务场景
前端·后端·rust
90后的晨仔4 小时前
uni-app 跨端布局与适配技术指南
前端
油丶酸萝卜别吃9 小时前
utils.js 说明文档
开发语言·javascript·ecmascript
zyplayer-doc11 小时前
VuePress类静态文档站和动态知识库怎么选:两种技术路线的适用场景
javascript·人工智能·后端·安全·智能手机
紫禁玄科13 小时前
Shai-Hulud:npm生态的自我复制蠕虫风暴
前端·npm·node.js
东风破_13 小时前
后端API没写好,前端难道干等着吗?
前端
百变梦仔13 小时前
从读项目到纠偏交付:我把 Codex 前端任务闭环升级成了第二版
前端
用户9385156350713 小时前
从前后端分离到前端接口工程:React + MockJS + Vite 解析
前端·后端·全栈
用户9385156350713 小时前
从零在浏览器里跑 DeepSeek-R1:WebGPU + Transformers.js 全链路实战(三)
前端·react.js·typescript