美文网首页
useLayoutEffect

useLayoutEffect

作者: 我是Msorry | 来源:发表于2021-01-10 10:41 被阅读0次

布局副作用

  • useEffect在浏览器渲染完成后执行
  • useLayoutEffect在浏览器渲染前执行

特点

  • useLayoutEffect总是比useEffect先执行
  • 使用useLayoutEffect时,里面的任务最好影响了 Layout ,否则会占用等待时间

经验

  • 为了用户体验,优先使用useEffect(优先渲染),因为大部分时候,我们不会去改变DOM
  • useLayoutEffect会影响用户看到画面变化的时间
function App() {
  const [n, setN] = useState(0)
  useEffect(()=>{
    document.querySelector('#App').innerText = `n: 1000`
  },[n])
  return (
    <div id="App">
      n:{n}
    </div>
  );
}

因为useEffect在render之后调用,页面会有一个从0变成1000的短暂闪烁


function App() {
  const [n, setN] = useState(0)
  useLayoutEffect(()=>{
    document.querySelector('#App').innerText = `n: 1000`
  },[n])
  return (
    <div id="App">
      n:{n}
    </div>
  );
}
image.png

正常情况下,DOM操作很多,等DOM操作完,再去渲染,useLayoutEffect在渲染前,改变DOM

useEffect和useLayoutEffect的时序

function App() {
  const [n, setN] = useState(0)
  const time = useRef(null)
  const onClick = () => {
    setN(i => i + 1)
    time.current = performance.now()
  }
  useEffect(() => {
    if(time.current){
      console.log('useEffect时序')
      console.log(performance.now()-time.current)
    }
  })
  useLayoutEffect(() => {
    if(time.current){
      console.log('useLayoutEffect时序')
      console.log(performance.now()-time.current)
    }
  })
  return (
    <div className="App">
      n:{n}
      <button onClick={onClick}>+1</button>
    </div>
  );
}

image.png

相关文章

  • react hooks 之 useLayoutEffect

    useLayoutEffect useLayoutEffect 执行顺序,组件更新挂载完成 => 执行 useLa...

  • useEffect 和 useLayoutEffect 区别

    useEffect useLayoutEffect 使用方法同理 区别 useLayoutEffect 总会比 u...

  • useLayoutEffect

    https://daveceddia.com/useeffect-vs-uselayouteffect/ The ...

  • useLayoutEffect

    简介 1 .类似于useEffect。区别就是执行的时机2 .useEffect不会阻塞浏览器的绘制任务,他会在页...

  • useLayoutEffect

    布局副作用 useEffect在浏览器渲染完成后执行 useLayoutEffect在浏览器渲染前执行 特点 us...

  • useLayoutEffect

    其函数签名与useEffect相同,但它会在所有的 DOM 变更之后同步调用 effect。 可以使用它来读取 D...

  • useLayoutEffect

    useLayoutEffect与useEffect名字很像,用法也大致类似,但两者执行时机不同: useEffec...

  • useLayoutEffect

    ◼ useLayoutEffect看起来和useEffect非常的相似,事实上他们也只有一点区别而已: useE...

  • useEffect & useLayoutEffect

    useEffect useEffect 用来执行副作用操作,副作用可以理解为对环境做出影响的操作,比如数据获取,设...

  • useEffect vs useLayoutEffect

    https://blog.logrocket.com/useeffect-vs-uselayouteffect/h...

网友评论

      本文标题:useLayoutEffect

      本文链接:https://www.haomeiwen.com/subject/ougnrktx.html