[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();
相关推荐
IT_陈寒8 分钟前
为什么你应该学习JavaScript?
前端·人工智能·后端
大龄秃头程序员14 分钟前
iOS冷启动监控Demo
前端
光影少年19 分钟前
为什么 JavaScript 中 0.1 + 0.2 !== 0.3,如何让其相等?
前端·javascript·算法
掘金酱1 小时前
[稀土掘金 × 火山引擎] AI用量周榜冲刺赛|获奖名单公示
前端·人工智能·后端
泡泡oO1 小时前
“如果你还在用Superpowers,那我不要和你说话”
前端·后端·全栈
维克兜率天1 小时前
趋势过滤:避免被“假突破“反复打脸
前端
8年区块链老兵2 小时前
一篇文章教会你:用区块高度读懂比特币链上的每一笔交易
前端
xixichensh2 小时前
前端转做AI程序员第一步——开发一个AI流式对话Demo
前端
梓雨枔2 小时前
JavaScript+快速学习,简单好用~
javascript·学习
木易 士心2 小时前
JavaScript 闭包原理和实践深度解析
开发语言·javascript·ecmascript