[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();
相关推荐
云飞云共享云桌面2 分钟前
SolidWorks如何实现多人共享
服务器·前端·数据库·人工智能·3d
晚霞的不甘3 分钟前
Flutter for OpenHarmony《智慧字典》 App 底部导航栏深度解析:构建多页面应用的核心骨架
前端·经验分享·flutter·ui·前端框架·知识图谱
h7ml3 分钟前
电商返利系统中佣金计算的幂等性保障与对账补偿机制实现
服务器·前端·php
EndingCoder4 分钟前
高级项目:构建一个 CLI 工具
大数据·开发语言·前端·javascript·elasticsearch·搜索引擎·typescript
RFCEO8 分钟前
HTML元素+网页布局区块概念汇总表
前端·html·html编程基础课·html元素汇总表·html元素位置展示
摘星编程10 分钟前
OpenHarmony环境下React Native:useDebugValue自定义Hook调试
javascript·react native·react.js
沙丁鱼意大利面11 分钟前
五子棋(javascript)
javascript·css·css3
Dawndddddd18 分钟前
XSS知识点总结
前端·xss
2601_9498477520 分钟前
Flutter for OpenHarmony 剧本杀组队App实战:关于我们页面实现
开发语言·javascript·flutter
风之舞_yjf22 分钟前
Vue基础(26)_单文件组件
前端·vue.js