react useMemo useCallback 作用

前言

useMemo和useCallback是作为性能优化的,减少一些不必要的渲染

useMemo

对值的优化,如果这个值是依赖于某个值计算来的,我不希望其他state变化的时候,这个值也被重新渲染。

function Test1 (props) {
    const [a,seta]=useState(0)
    const [b,setB]=useState(0)

    function getRes() {
        console.log('getRes函数执行了');
        return '哈哈哈哈'+b
    }
	
	//使用hook
    const resB=useMemo(getRes,[b])//根据b的值计算渲染
    //不使用hook
    const resB=getRes()
    
    return(
        <>
            
            
            

a是:{a}

b是:{b}

由b计算的值:{resB}

) }

不使用hook的话每次渲染组件时候,无论你点a还是点b都会重新计算一次react useMemo useCallback 作用_第1张图片
使用hook后,只有在b加1的时候才会计算
react useMemo useCallback 作用_第2张图片

useCallback

对函数渲染的优化,不希望这个函数每次state变化的时候,都被重新创建

let set=new Set()//Set集合不会插入重复值
function Test1 (props) {
    const [a,seta]=useState(0)

	/*使用hook写法*/
    const add=useCallback(()=>{seta(a=>a+1)},[])
    
    /*不使用hook的普通写法*/
    const add=()=>{seta(a=>a+1)}

    set.add(add)
    console.log(set.size);

    return(
        <>
            
        
    )
}

不使用hook每次组件重新渲染都会创建一个新的函数,因为set集不会插入相同的数据,所以很好验证react useMemo useCallback 作用_第3张图片
使用hook后,保证了每次渲染都不会继续创建这个函数react useMemo useCallback 作用_第4张图片

什么是依赖项

usexxx(()=>{},[依赖])

只有当我的依赖发生变化之后,才会执行对应的函数内容,即可以称之为驱动,受到依赖项的驱动发生的改变。

  • 如果不提供依赖项,则会每次渲染后都触发函数
const resB=useMemo(getRes)
  • 如果提供了空的依赖,那么只会执行一次
const resB=useMemo(getRes,[])
  • 如果提供了依赖,那么就如上所说,依赖变化才会变
const resB=useMemo(getRes,[b])
  • 依赖可以是好几个
const resB=useMemo(getRes,[a,b])

你可能感兴趣的:(react,前端)