• useEffect和useLayoutEffect的区别


    useEffect和useLayoutEffect区别

    useEffect

    基本上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;
    
     
    gifhome_1536x760_5s.gif

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

    改成useLayoutEffect试试


     
    gifhome_1536x760_5s (1).gif

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

    I believe your apartment is on fire



    作者:LastStranger
    链接:https://www.jianshu.com/p/412c874c5add
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    java项目路径获取
    String.getBytes()和new String()(string与byte[]的转换)
    Android生成一维码
    Android PullToRefresh (GridView 下拉刷新上拉加载)
    Android PullToRefresh (ListView GridView 下拉刷新) 使用详解
    Android 二维码扫描框 加四个角及中间横线自动下滑
    android 百度地图定位开发2
    android 百度地图定位开发1
    广播发送者&广播接收者介绍
    电脑配置 eclipse 环境变量
  • 原文地址:https://www.cnblogs.com/chenzxl/p/13091478.html
Copyright © 2020-2023  润新知