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 方法),但是点击次数按钮,执行两次???