官方文档: 简单来说就是创建一个函数和依赖项,创建函数会需要一个返回值,只有在依赖项发生改变的时候,才会调用创建函数,返回一个新的值 useMemo应用: useMemo与useCallback很像,根据上述useCallback已经可以想到useMemo也能针对传入子组件的值进行缓存优化
const [count, setCount] = useState(0);
const userInfo = {
// ...
age: count,
name: 'binghua'
}
return <UserCard userInfo = {userInfo}/>
const [count, setCount] = useState(0);
const userInfo = useMemo(() => {
return {
name: 'Jace',
age: count
};
}, [count]);
return <UserCard userInfo={useInfo}/>
很明显上面的组件userInfo每次都是一个新的对象,无论count发生改变没都会重新渲染,而下面的count之只有在count发生改变时才会返回新的对象。
上述的用发是有关于父子组件传值带来的性能优化,实际上useMemo的作用不止于此,根据官方文档内容介绍
可以把最昂贵的计算逻辑放到useMemo中,只有当依赖值发生改变的时候才去更新。
const num = useMemo(() => {
let num = 0;
return num;
},[count]);
return <div>{num}</div>
实际操作中useMemo的场景可能远比useCallback广泛,可以将useMemo的返回值定义为一个函数,这样就可以模拟useCallback.