useMemo

useMemo 主要用来解决使用 React Hooks 产生的无用渲染的性能问题,function 的形式声明组件,失去了 shouldComponentUpdate(在组件更新之前)这个生命周期,也就是说我们没有办法通过组件更新前条件来决定组件是否更新。而且,在函数组件中,也不再区分 mount 和 update 两个状态,意味着函数组件的每一次调用都会执行内部的所有逻辑,就带来了非常大的性能损耗。 useMemo 和 useCallback 都是解决上述性能问题的。

import React , {useState,useMemo} from 'react'

function HMemo(){
    const [count,setCount] = useState(0)
    const [age,setAge] = useState(18)
    return (
        <div>
            <Son count={count}></Son>
            <button onClick={()=>setCount(count+1)}>点击次数:+</button>
            <button onClick={()=>setAge(age+1)}>年龄:{age}</button>
        </div>
    )
}

function Son({count}){ //props解构
    function changeNum(num){
        console.log(`${num}x10=${num}*10`)
    }

    const changeCount = changeNum(count)
    return (
        <div>
            <h3>点击次数是:{count}</h3>
            <div>{changeCount}</div>
        </div>
    )
}

export default HMemo;

父组件调用了子组件,子组件中定义了一个 changeNum 方法,打印 num*10 后的值,此时,点击 次数 按钮或者年龄 按钮,changeNum 方法 每次都会执行,这就是性能的损耗。当我们点击 年龄 按钮时,changNum 方法不应该执行,只有在点击 次数 按钮时才能执行

使用 useMemo,然后给子组件 changeCount 传递第二个参数,参数匹配 成功,才会执行

 

点击年龄,不再打印 (不会执行 printCount 方法),但是点击次数按钮,执行两次???

原文地址:https://www.cnblogs.com/shanlu0000/p/13130162.html