[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();
相关推荐
巴巴博一13 小时前
2026 最新:Trae / Cursor 一键接入 taste-skill 完整教程(让 AI 前端告别“AI 味”)
前端·ai·ai编程
kyriewen13 小时前
半夜三点线上崩了,AI替我背了锅——用AI排错,五分钟定位三年老bug
前端·javascript·ai编程
kyriewen13 小时前
我让 AI 当了 24 小时全年无休的“毒舌考官”
前端·ci/cd·ai编程
hexu_blog13 小时前
vue+java实现图片批量压缩
java·前端·vue.js
IT_陈寒13 小时前
为什么你应该学习JavaScript?
前端·人工智能·后端
lifejump14 小时前
Empire(帝国)CMS 7.5 XSS注入
前端·安全·xss
无风听海14 小时前
OAuth 2.0 前端通道与后端通道深入剖析
前端·oauth
sakiko_14 小时前
UIKit学习笔记8-发送照片、拍摄照片并发送
前端·swift·uikit
_code_bear_14 小时前
OpenSpec CLI 与 OPSX 工作流说明
前端·后端·架构