[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();
相关推荐
●VON4 分钟前
Flutter Web 开发:解决跨域(CORS)问题的终极指南
前端·flutter
一只大马猴呀16 分钟前
Windows 安装使用 nvm,Node.js、npm多版本管理、切换
前端·npm·node.js
吴声子夜歌18 分钟前
TypeScript——VSCode搭建开发环境
javascript·vscode·typescript
网络点点滴19 分钟前
渐层响应式shallowRef和shallowReactive
前端·javascript·vue.js
@yanyu66622 分钟前
05计算属性与定时器
前端·javascript·vue.js
哈__24 分钟前
ReactNative项目OpenHarmony三方库集成实战:react-native-chart-kit
javascript·react native·react.js
小同志0026 分钟前
JQuery
前端·javascript·jquery
就是个名称28 分钟前
Chrome使用cesium.js或者three.js报错不支持webGL
javascript·chrome·webgl
zdl68628 分钟前
SpringBoot返回文件让前端下载的几种方式
前端·spring boot·后端
拾贰_C28 分钟前
【Vue | vue3 | spring boot】前端前台项目搭建
前端·vue.js·spring boot