[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();
相关推荐
Never_Satisfied16 分钟前
在HTML & CSS中,img标签固定宽度时,img和图片保持比例缩放
前端·css·html
Cache技术分享21 分钟前
327. Java Stream API - 实现 joining() 收集器:从简单到进阶
前端·后端
颜酱22 分钟前
滑动窗口算法通关指南:从模板到实战,搞定LeetCode高频题
javascript·后端·算法
咕噜咕噜啦啦28 分钟前
JavaScript基础
开发语言·javascript
人工智能先锋29 分钟前
从零部署你的24小时AI管家:OpenClaw完整实战指南(附踩坑记录)
前端·github
不是株34 分钟前
苍穹外卖(前端)
前端
yuezhilangniao38 分钟前
从Next.js到APK:Capacitor跨平台(安卓端)打包完全指南
android·开发语言·javascript
zheshiyangyang1 小时前
前端面试基础知识整理【Day-6】
前端·面试·职场和发展
星火开发设计1 小时前
关联式容器:set 与 multiset 的有序存储
java·开发语言·前端·c++·算法
未来龙皇小蓝1 小时前
RBAC前端架构-06:使用localstorage及Vuex用户信息存储逻辑
前端·vue.js