React中useEffect、useCallBack、useLayoutEffect

简介: 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>)
}

遇见问题,这是你成长的机会,如果你能够解决,这就是收获。

相关文章
|
5月前
|
前端开发 JavaScript
深入理解并实践React Hooks —— useEffect与useState
深入理解并实践React Hooks —— useEffect与useState
201 1
|
3月前
|
前端开发
深入探索React Hooks:从useState到useEffect
深入探索React Hooks:从useState到useEffect
39 3
|
3月前
|
前端开发 JavaScript
深入探索React Hooks:从useState到useEffect
深入探索React Hooks:从useState到useEffect
|
5月前
|
前端开发
React中函数式Hooks之useEffect的使用
本文通过示例代码讲解了React中`useEffect` Hook的用法,包括模拟生命周期、监听状态和清理资源。
70 2
React中函数式Hooks之useEffect的使用
|
5月前
|
缓存 前端开发
React中函数式Hooks之memo、useCallback的使用以及useMemo、useCallback的区别
React中的`memo`是高阶组件,类似于类组件的`PureComponent`,用于避免不必要的渲染。`useCallback` Hook 用于缓存函数,避免在每次渲染时都创建新的函数实例。`memo`可以接收一个比较函数作为第二个参数,以确定是否需要重新渲染组件。`useMemo`用于缓存计算结果,避免重复计算。两者都可以用来优化性能,但适用场景不同:`memo`用于组件,`useMemo`和`useCallback`用于值和函数的缓存。
136 1
|
6月前
|
前端开发 JavaScript
介绍React中的useEffect
【8月更文挑战第6天】介绍React中的useEffect
51 2
|
7月前
|
存储 前端开发 API
useEffect问题之React提供了什么来帮助确保useEffect的依赖被正确指定
useEffect问题之React提供了什么来帮助确保useEffect的依赖被正确指定
|
7月前
|
前端开发
react18【系列实用教程】Hooks 闭包陷阱 (2024最新版)含useState 闭包陷阱,useEffect 闭包陷阱,useCallback 闭包陷阱
react18【系列实用教程】Hooks 闭包陷阱 (2024最新版)含useState 闭包陷阱,useEffect 闭包陷阱,useCallback 闭包陷阱
92 0
|
9月前
|
设计模式 前端开发 数据可视化
【第4期】一文了解React UI 组件库
【第4期】一文了解React UI 组件库
450 0
|
9月前
|
资源调度 前端开发 JavaScript
React 的antd-mobile 组件库,嵌套路由
React 的antd-mobile 组件库,嵌套路由
160 0