React Hook的useCallback,memo,usememo的使用

5 篇文章 0 订阅

1、useCallback

每当组件重新渲染的时候,我们之前定义的函数就会被重新声明一次,即使这个函数不需要做出改变。这时可以使用useCallback。useCallback主要用于缓存一个函数。
useCallback接收两个参数,第一个参数为一个回调函数,第二个参数为依赖数组。只有当依赖数组中的成员发生变化时,才进行重新声明该回调函数。
一个简单的demo

mport React,{useCallback,useState} from 'react'

export default function UseCallback() {
    const [text,settext] = useState("小明")
    const fun = useCallback(()=>{
        console.log(text)  
    },[text])
    return (
        <div>
            <button onClick={_=>{
                fun()
                settext("小美")
            }}>click</button>
        </div>
    )
}

这段代码第一次点击的时候,输出为小明,第二次点击输出为小美。说明fun函数被重新声明了。当吧依赖数组中的text取消变为空数组之后,第一次和第二次点击都输出小明,说明fun函数的内容已经被缓存起来了。

使用useCallback可以进行性能优化,减少不必要的性能损耗!

memo

memo其实和类组件中的purecomponent的功能一直,都是用来做组件的性能优化的。
现在我们有如下的场景,父组件是一个呈现事件的组件,每一秒刷新一次当前时间,子组件只是一个普通的文字组件。我们知道,每当父组件状态被改变,子组件也会被重新渲染,这时在hook里我们就可以用memo进行性能的优化。
父组件:

function Memo() {
    var [time,settime] = useState()
    useEffect(()=>{
        setInterval(()=>{
            settime(new Date().toString())
        },[time])
    },[time])
    
    return (
        <div>
            当前时间为-{time}
            <Child ></Child>
        </div>
    )
}

子组件:

var Child = React.memo(function Child(){
    console.log("我被重新渲染了")
    return (
        <div >我是子组件</div>
    )
},(prevprops,nextprops)=>{
    if(prevprops === nextprops){
        return false
    }
    return true
})

memo是一个高阶组件,它接受两个参数,第一个是一个组件,第二个是一个函数。第二个函数中,会接受之前的属性和之后的属性,我们可以通过对比这两个属性,来决定第一个组件进步进行重新渲染。

useMemo

useMemo和useCallback功能相似,都是用来做性能的优化,用来缓存数据。不同的是useMemo返回的是一个函数执行的结果,而useCallback返回该函数本身。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当你在使用React时,你可能会经常遇到需要优化组件性能的情况。React.memouseMemo都是React提供的两种优化性能的方式。 React.memo是一个高阶组件(Higher Order Component),它可以优化组件的性能,使得组件只有在它的props发生改变时才会重新渲染。这种优化是通过比较前一次和当前props的浅层比较来实现的。使用React.memo时,需要将组件作为React.memo函数的参数传递,例如: ``` import React from 'react'; const MyComponent = React.memo(props => { // 组件代码 }); export default MyComponent; ``` useMemo是一个Reacthook函数,它可以缓存组件中的一些计算结果,以避免重复计算。useMemo接收两个参数:一个计算函数和一个依赖数组。当依赖数组中的任何一个值发生改变时,useMemo会重新计算并返回新的值。如果依赖数组中的任何一个值都没有发生改变,则会返回上一次缓存的值。使用useMemo时,需要将计算函数作为useMemo的第一个参数传递,依赖数组作为第二个参数传递,例如: ``` import React, { useMemo } from 'react'; const MyComponent = props => { const expensiveCalculation = useMemo(() => { // 计算代码 }, [props.dependency]); // 组件代码 }; export default MyComponent; ``` 需要注意的是,React.memouseMemo都只是对组件性能进行优化的工具,并不是适用于所有情况的万能解决方案。在使用它们时,需要谨慎考虑依赖项和是否真的需要进行性能优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值