缓存计算结果

useMemouseCallback一样,都是:建立了一个依赖数据和结果的绑定关系,只有当依赖变了,结果才更新。

useCallback是可以用useMemo实现的,因为函数也是一个计算结果。

使用场景

const Count = () => {
	const [count, setCount] = useState(0)
	useEffect(() => {
		setCount(count + 1)
	}, [])
	// 当count没变,但是其他逻辑导致函数重新执行的时候,`subValue`还是会重新生成,即使内容没有变化
	// 对于`<Child>`来说,`subValue`是变化了的,`<Child>`就会重新渲染
	const subValue = { count }
	return <Child prop1={subValue} />
}
 
 
// 用`useMemo`优化
const Count = () => {
	const [count, setCount] = useState(0)
	useEffect(() => {
		setCount(count + 1)
	}, [])
	const subValue = useMemo(() => {
		return { count }
	}, [count])
	return <Child prop1={subValue} />
}
 

所以useMemo除了有缓存计算结果这个作用外,还有避免子组件重复渲染的功能