[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();
相关推荐
师傅别念了14 分钟前
React Hooks 踩坑合集,全是血泪教训
react.js
向北丶25 分钟前
vite项目中配置alias别名
前端·vite
COOLMO研究AI35 分钟前
Next.js App Router 中 sitemap、robots 与 canonical 的配置与排查
前端·web·js·网站优化
DyLatte1 小时前
AI 给了我 8 个优化方案,全都是对的,但没有一个有用
前端·后端·程序员
AI情绪识别开源1 小时前
检信ALLEMOTION 认知评估分析器 · WebSocket 推送数据文档
javascript
OpsEye1 小时前
公司内部全员使用 AI,如何保证会话合规、行为可审计?
javascript·ai编程
the局外人1 小时前
一座不够大的城市,装下了我毕业后的成长
前端·程序员·求职
涛涛ing1 小时前
周下载量1.1亿的Tailwind,为什么养不活自己?
前端
变与不变8062 小时前
JS事件机制精讲
前端·javascript
装备研究社2 小时前
Promise 的五个状态,90% 的人只说对了三个
前端