[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();
相关推荐
ZC1995925 分钟前
Node.js npm 安装过程中 EBUSY 错误的分析与解决方案
前端·npm·node.js
升鲜宝供应链及收银系统源代码服务6 分钟前
生鲜配送供应链管理系统源代码之升鲜宝社区团购商城小程序(一)
java·前端·数据库·小程序·notepad++·供应链系统源代码·多门店收银系统
ghhgy53110 分钟前
Chrome、Edge浏览器显示“由贵组织管理”,删除、解决方法
前端·chrome·edge
533_11 分钟前
[svg] fill-opacity、stroke-opacity与opacity
前端
九天轩辕12 分钟前
Chromium 内核深度剖析:HTML 属性解析限制导致的视频静音失效问题
前端·html·音视频
cmdyu_13 分钟前
Chrome 132+ 篡改猴脚本不生效的排查与解决
前端·chrome
曹牧13 分钟前
Java:解析Json字符串格式要求
java·linux·运维·前端
wuhen_n20 分钟前
终局之战:全链路性能体检与监控
前端·javascript·vue.js
淑子啦21 分钟前
3D走马灯(网页&&小程序)
react.js·3d·小程序
Greg_Zhong22 分钟前
认识前端自动化测试、小程序中如何实现单元测试
前端·小程序·单元测试