[React]用 flushSync 同步更新 state

参考:使用 ref 操作 DOM – React 中文文档

同时操作state和ref的情况还是有的,按我的原来的处理肯定是使用setTimeout了,看到官方有解决方案,摘录下来以便查看。

源代码就不完整贴了,直接看问题代码块:

setTodos([ ...todos, newTodo]);
listRef.current.lastChild.scrollIntoView();

在 React 中,state 更新是排队进行的。在这个示例中会导致问题,因为 setTodos 不会立即更新 DOM。因此,当你将列表滚动到最后一个元素时,尚未添加待办事项。这就是为什么滚动总是“落后”一项的原因。

要解决此问题,你可以强制 React 同步更新(“刷新”)DOM。 为此,从 react-dom 导入 flushSync 并将 state 更新包裹 到 flushSync 调用中:

flushSync(() => {
  setTodos([ ...todos, newTodo]);
});
listRef.current.lastChild.scrollIntoView();

相关推荐

  1. [React] flushSync 同步更新 state

    2024-06-07 02:44:02       33 阅读
  2. reactstate深入浅出

    2024-06-07 02:44:02       29 阅读
  3. React state 执行时机

    2024-06-07 02:44:02       28 阅读
  4. React state用法 异步总结

    2024-06-07 02:44:02       27 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-07 02:44:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-07 02:44:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-07 02:44:02       87 阅读
  4. Python语言-面向对象

    2024-06-07 02:44:02       96 阅读

热门阅读

  1. Sass 详解

    2024-06-07 02:44:02       26 阅读
  2. linux c socket编程里SO_REUSEADDR的作用

    2024-06-07 02:44:02       34 阅读
  3. 【安卓基础】-- 消息机制 Handler

    2024-06-07 02:44:02       32 阅读
  4. lm studio 0.2.24国内下载模型

    2024-06-07 02:44:02       32 阅读
  5. 常见代码版本管理工具

    2024-06-07 02:44:02       33 阅读
  6. Android WebView升级

    2024-06-07 02:44:02       22 阅读
  7. 判断素数/质数

    2024-06-07 02:44:02       29 阅读
  8. Loguru,一个 Python 日志神器

    2024-06-07 02:44:02       31 阅读
  9. MySQL学习——从命令行调用MySQL 程序

    2024-06-07 02:44:02       26 阅读
  10. 【视频转码】ZLMediaKit漏洞报告的问题

    2024-06-07 02:44:02       30 阅读
  11. 2024-05-30 vscode python不能调试

    2024-06-07 02:44:02       33 阅读