javascript - React hook useEffect() 底层。使用 useEffect 安排的效果是否会阻塞主线程?

标签 javascript reactjs react-hooks use-effect

在 React DOCs 中,关于 useEffect() 钩子(Hook),我们得到:

“使用 useEffect 安排的效果不会阻止浏览器更新屏幕。”

Tip

Unlike componentDidMount or componentDidUpdate, effects scheduled with useEffect don’t block the browser from updating the screen.

这到底是什么意思?

示例:假设我有以下内容:

  • 受控输入
  • 并在第一次渲染后执行一些昂贵的同步计算的 useEffect。
function App() {
  const [inputValue,setInputValue] = React.useState('');

  useEffect(()=>{
    // RUN SOME EXPENSIVE SYNCHRONOUS FUNCTION
  },[]);

  return (
    <input value={inputValue} onChange={()=>setInputValue(event.target.value)}/>
  );

}

这是否意味着即使在运行繁重的同步计算时,我也可以完全使用我的input(由 React 使用 JS 控制,它是单线程的)?如果是这样,这怎么可能?

最佳答案

类组件

  1. 渲染虚拟 dom。
  2. componentDidMount
  3. 在浏览器上绘画。

功能组件

  1. 渲染虚拟 dom。
  2. 使用LayoutEffect
  3. 在浏览器上绘画。
  4. useEffect

如果您的副作用是异步的,则 componentDidMountuseEffect 之间没有区别。 (差不多)
但如果是同步的,componentDidMountuseLayoutEffect 会造成视觉滞后。

关于javascript - React hook useEffect() 底层。使用 useEffect 安排的效果是否会阻塞主线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56968366/

相关文章:

javascript - 使用 HashKeyValue 和 RangeKeyCondition 的 dynamoDB 全局二级索引查询无法运行 JavaScript

javascript - 从超链接将表单对象传递给 javascript 时出现问题

javascript - 使用 npx create-react-app newapp 命令,但在一段时间后显示 57 个软件包正在寻找资金

javascript - 如何在 React 中动态设置 css 属性(背景颜色)?

reactjs - useState hook 如何能够重新渲染其父函数?

javascript - React Hooks 多个带有单独倒计时的警报

javascript - 使用 React Hooks 进行条件渲染 : loading

javascript - 使用jquery获取<tag>的内容

javascript - 使用 JavaScript 解码 PKCS12 文件并从中获取加密私钥的最佳方法

javascript - 如何在 React Final Form 之外管理状态?