• React中useEffect、useCallBack、useLayoutEffect


    在函数中使用定时器

    import { useEffect, useState } from "react";
    export default function Funcom() {
        useEffect(() => {
            setInterval(() => {
                console.log('我在执行---')
            }, 1000)
        }, [])
        return (<div>我是组件</div>)
    }
    当我们切换组件的时候,组件别销毁的时候。
    定时器也在触发。
    如何在组件卸载的时候清除定时器呢?
    我们可以使用 useEffect 中使用 return () => { }
    在上面这个函数里面清除定时器
    

    函数中使用 useEffect 清除定时器器

    import { useEffect, useState } from "react";
    export default function Funcom() {
        useEffect(() => {
           let timer= setInterval(() => {
                console.log('我在执行---')
            }, 1000)
            // 当没有依赖的时候,组件销毁的时候执行
            // 当它有依赖的时候,组件更新的时候回被执行
            return () => { 
                console.log('当没有依赖的时候,组件销毁的时候执行')
                clearInterval(timer)
            }
        }, [])
        return (<div>我是组件</div>)
    }
    
    现在当我们切换页面后,
    定时器也被清除了。
    特别注意的是:useEffect:当没有依赖的时候,组件销毁的时候执行  return () => { }
    useEffect:当它有依赖的时候,组件更新的时候回被执行  return () => { }
    
    ps:在一个组件中,useEffect可以使用多次。
    而生命周期钩子函数只可以使用一次,后面的会覆盖前面的生命周期钩子函数
    

    useEffect和useLayoutEffect的区别

    好奇

    import { useEffect, useState } from "react";
    export default function Funcom() {
        const [count, setCount] = useState(1) 
        function addHandler() { 
            setCount(count+1)
        }
        return (<div>
            <button onClick={addHandler}>计数器</button>
            <h1>{ count }</h1>
        </div>)
    }
    
    上面这一段代码,当我们点击按钮的时候。
    count的数值会+1;视图也会更新。
    难道大家不好奇吗?
    当我们点击按钮的时候, 整个 Funcom组件都会更新一次,重新渲染一遍。
    它怎么可能会保存住 count的值?是不是是不是挺好奇的呢?
    有的小伙伴可能不相信:
    当我们点击按钮的时候, 整个 Funcom组件都会更新一次,重新渲染一遍。
    我们通过一个小粒子来看一下
    

    小粒子-整个 Funcom组件都会更新一次,重新渲染一遍

    import { useEffect, useState } from "react";
    export default function Funcom() {
        const [count, setCount] = useState(1) 
        let myunm=1
        const addHandler=()=> { 
            setCount(count + 1)
            myunm = myunm + 1
            console.log(myunm  ) //永远输出的是2
        }
           
        return (<div>
            <button onClick={addHandler}>计数器</button>
            <h1>{count}</h1>
        </div>)
    }
    我们发现控制台永远输出的都是2.
    可是我每次点击的时候,都给 myunm新增了+1;
    怎么每次都是2呢?
    因为每次点击的时候 Funcom 组件都被渲染了一次。
    因此myunm每次的初始值都是1。所以每次打印出来的是2
    

    记忆函数 useCallBack

    防止因为组件重新渲染,导致方法被重新定义。这样性能不太好。
    为了实现起到缓存的作用。提高性能。
    我们可以使用 useCallBack 记忆函数。
    可以帮助我们起到缓存的作用,只有第二个参数发生变化,才会重新声明一次。
    

    useCallback的简单使用

    import { useState,useCallback } from "react";
    export default function Funcom() {
        const [count, setCount] = useState(1) 
        const addHandler = useCallback(() => { 
                setCount(count + 1)
        }, [count])
        //只有当count发生变化后, addHandler 才会被重新声明一次。 提升性能
        return (<div>
            <button onClick={addHandler}>计数器</button>
            <h1>{count}</h1>
        </div>)
    }
    

  • 相关阅读:
    AJPFX总结hashmap和hashtable的区别
    AJPFX分享JAVA修饰符详解
    AJPFX分享java排序之希尔排序
    Mysql框架---HMySql
    html/css实现聊天布局
    Java连接Mysql
    微信小程序九宫格布局
    Android设计模式——MVP
    iOS与H5交互(WKWbebView)
    iOS MJExtension的使用
  • 原文地址:https://www.cnblogs.com/IwishIcould/p/16502717.html
Copyright © 2020-2023  润新知