有点类似useState,只是其目标对象是方法fn


即暂存方法,当进行重新渲染时,子组件不会因为重新渲染而重新渲染


如下示例,当点击button的时候,会increaseCount,然后整个Index组件会刷新,

这里假如不使用useCallback,那么handleClick将重新赋值,即会引动子组件Button进行重新渲染

但是因为使用了useCallback,返回的handleClick是老的引用地址,并没有给到Button新的props,所以不会重新渲染Button

import React, { useState, useCallback, memo } from 'react'

const Button = memo(({ handleClick }) => {
    return (
        <button onClick={handleClick}>Click!</button>
    )
})

const Index = () => {
    const [clickCount, increaseCount] = useState(0);
    
    // 使用 useCallback 将 handleClick 缓存起来
    const handleClick = useCallback(() => {
        increaseCount(count => count + 1);
    },[])

    return (
        <div>
            <p>{clickCount}</p>
            <Button handleClick={ handleClick } />
        </div>
    )
}

export default Index

参考:

https://juejin.cn/post/7074938135544594463