[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();
相关推荐
GISer_Jing12 小时前
Dify可视化编排:技术架构与实战指南
前端·人工智能·ai编程
宇宙realman_99913 小时前
DSP28335-FlashAPI使用
linux·前端·python
踩着两条虫13 小时前
VTJ 平台六大设计模式落地实战指南
开发语言·前端·人工智能·低代码·设计模式·重构·架构
Yeats_Liao13 小时前
后台 Sidebar 伸缩交互(PC + 移动端)实现
前端·javascript·css·html5
MXN_小南学前端13 小时前
computed 计算属性详解:触发时机、实战场景、Vue2 与 Vue3 对比
前端·javascript·vue.js
isNotNullX13 小时前
数据大屏怎么做?数据大屏有哪四个核心环节
开发语言·前端·javascript
漫游的渔夫13 小时前
RAG 落地 3 个月,我才发现排序(Rerank)比检索更重要
前端·人工智能
衣乌安、14 小时前
Agent之ReAct
前端·ai
CodeAI14 小时前
不会 Next.js 你好意思说自己是 React 开发者?从零到上线一条龙
前端
竹林81814 小时前
Web3表单签名验证:我如何用 wagmi 和 siwe 让用户“无密码”登录
javascript