美文网首页
useEffect和useLayoutEffect的区别

useEffect和useLayoutEffect的区别

作者: 何家一枝花 | 来源:发表于2021-12-02 10:15 被阅读0次

    基本上90%的情况下,都应该用这个,这个是在render结束后,你的callback函数执行,但是不会block browser painting,算是某种异步的方式吧,但是class的componentDidMount 和componentDidUpdate是同步的,在render结束后就运行,useEffect在大部分场景下都比class的方式性能更好.
    useLayoutEffect
    这个是用在处理DOM的时候,当你的useEffect里面的操作需要处理DOM,并且会改变页面的样式,就需要用这个,否则可能会出现出现闪屏问题, useLayoutEffect里面的callback函数会在DOM更新完成后立即执行,但是会在浏览器进行任何绘制之前运行完成,阻塞了浏览器的绘制.

    可能讲的不是很清楚,看个例子吧

    import React, { useEffect, useLayoutEffect, useRef } from "react";
    import TweenMax from "gsap/TweenMax";
    import './index.less';
    
    const Animate = () => {
        const REl = useRef(null);
        useEffect(() => {
            /*下面这段代码的意思是当组件加载完成后,在0秒的时间内,将方块的横坐标位置移到600px的位置*/
            TweenMax.to(REl.current, 0, {x: 600})
        }, []);
        return (
            <div className='animate'>
                <div ref={REl} className="square">square</div>
            </div>
        );
    };
    export default Animate;
    
    image.png

    可以清楚的看到有一个一闪而过的方块.

    改成useLayoutEffect试试


    image.png

    可以看出,每次刷新,页面基本没变化

    作者:LastStranger
    链接:https://www.jianshu.com/p/412c874c5add
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    相关文章

      网友评论

          本文标题:useEffect和useLayoutEffect的区别

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