[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();
相关推荐
Mikey_n4 分钟前
Vue + Spring Boot 整合全解析
前端·vue.js·spring boot
腹肌要保暖5 分钟前
深入剖析服务端框架 elpis-core
前端
曼陀罗6 分钟前
怎么判断 open浏览器 还是刷新开着的浏览器窗口
前端
增删改查科学家8 分钟前
Jointjs工作流程图实现
前端
深海丧鱼8 分钟前
开发共享vscode文件书签插件
javascript·visual studio code
暖阳_xm8 分钟前
flex布局实现横向滚动
前端·css·微信小程序
前端门徒ian13 分钟前
关于html2pdf.js的使用记录
前端·javascript
Lin_熊米15 分钟前
仿 ElementUI 搭建自己的 vue 组件库
前端·vue.js·elementui
Bl_a_ck21 分钟前
npm、nvm、nrm
前端·vue.js·npm·node.js·vue
zhu_zhu_xia21 分钟前
npm包管理工具理解
前端·npm·node.js