[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();
相关推荐
宁雨桥4 分钟前
浏览器渲染原理
前端·浏览器·原理
Moment4 分钟前
此 KFC 不是肯德基,Kafka、Flink、ClickHouse 怎么搭、何时省掉 Flink
前端·后端·面试
鹏北海-RemHusband12 分钟前
JSBridge 原理详解
前端·信息与通信
T^T尚13 分钟前
一个完整的项目怎么打包成为一个app
前端·uni-app
wing9817 分钟前
通往“全干”之路一:前端部署
前端·vue.js·全栈
阿珊和她的猫20 分钟前
探究浏览器最大请求并发数:提升网页加载性能的关键
前端·javascript·vue.js
yuki_uix21 分钟前
表单写到想摔键盘?聊聊前端常见的复杂状态场景
前端
whisper23 分钟前
图片对比组件技
前端
简离23 分钟前
解决iOS页面返回缓存问题:pageshow事件详解与实战方案
前端
前端拿破轮29 分钟前
利用Github Page + Hexo 搭建专属的个人网站(二)
前端·后端·ai编程