useEffect和useLayoutEffect的區(qū)別

useEffect和useLayoutEffect區(qū)別

useEffect

基本上90%的情況下,都應(yīng)該用這個(gè),這個(gè)是在render結(jié)束后,你的callback函數(shù)執(zhí)行,但是不會(huì)block browser painting,算是某種異步的方式吧,但是class的componentDidMount 和componentDidUpdate是同步的,在render結(jié)束后就運(yùn)行,useEffect在大部分場(chǎng)景下都比class的方式性能更好.

useLayoutEffect

這個(gè)是用在處理DOM的時(shí)候,當(dāng)你的useEffect里面的操作需要處理DOM,并且會(huì)改變頁(yè)面的樣式,就需要用這個(gè),否則可能會(huì)出現(xiàn)出現(xiàn)閃屏問題, useLayoutEffect里面的callback函數(shù)會(huì)在DOM更新完成后立即執(zhí)行,但是會(huì)在瀏覽器進(jìn)行任何繪制之前運(yùn)行完成,阻塞了瀏覽器的繪制.

可能講的不是很清楚,看個(gè)例子吧

import React, { useEffect, useLayoutEffect, useRef } from "react";
import TweenMax from "gsap/TweenMax";
import './index.less';

const Animate = () => {
    const REl = useRef(null);
    useEffect(() => {
        /*下面這段代碼的意思是當(dāng)組件加載完成后,在0秒的時(shí)間內(nèi),將方塊的橫坐標(biāo)位置移到600px的位置*/
        TweenMax.to(REl.current, 0, {x: 600})
    }, []);
    return (
        <div className='animate'>
            <div ref={REl} className="square">square</div>
        </div>
    );
};

export default Animate;
gifhome_1536x760_5s.gif

可以清楚的看到有一個(gè)一閃而過的方塊.

改成useLayoutEffect試試


gifhome_1536x760_5s (1).gif

可以看出,每次刷新,頁(yè)面基本沒變化

I believe your apartment is on fire

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 作為一個(gè)合格的開發(fā)者,不要只滿足于編寫了可以運(yùn)行的代碼。而要了解代碼背后的工作原理;不要只滿足于自己的程序...
    六個(gè)周閱讀 8,664評(píng)論 1 33
  • 40、React 什么是React?React 是一個(gè)用于構(gòu)建用戶界面的框架(采用的是MVC模式):集中處理VIE...
    萌妹撒閱讀 1,179評(píng)論 0 1
  • It's a common pattern in React to wrap a component in an ...
    jplyue閱讀 3,380評(píng)論 0 2
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HT...
    kismetajun閱讀 28,774評(píng)論 1 45
  • React是現(xiàn)在最流行的前端框架之一,它的輕量化,組件化,單向數(shù)據(jù)流等特性把前端引入了一個(gè)新的高度,現(xiàn)在它又引入的...
    老鼠AI大米_Java全棧閱讀 5,854評(píng)論 0 26

友情鏈接更多精彩內(nèi)容