useMemo 是 React 的一个钩子,它用于对计算结果进行记忆。当你有一些计算代价较高的操作时,useMemo 可以帮助你避免在每次渲染时都重新计算,从而提升性能。
useMemo(() => computeExpensiveValue(a, b), [a, b]) 接受一个“创建”函数和一个依赖项数组。useMemo 的依赖数组为空时,它实际上意味着这个记忆化的值仅在组件首次渲染时计算一次,并在组件的后续渲染中始终返回这个初始计算的值。依赖数组为空表示没有任何依赖项会触发重新计算,因此计算结果在组件的整个生命周期内保持不变。useMemo 像是一个聪明的助手,它记住了你上次做复杂计算的结果。每次你需要这个结果时,如果输入(依赖项)没变,它就直接给你上次的答案,而不是重新计算一遍。1 | import React, { useMemo, useState } from 'react'; |
在这个例子中,只有当 count 改变时,expensiveComputation 函数才会被重新调用。否则,它将返回上一次计算的结果。
useMemo 和 useCallback有什么不同? (理解React中的useCallback)usememo 是缓存一个具体的值,usecallback 是缓存一个函数
在哪些情况下不应该使用 useMemo,而哪些情况应该使用呢?
不应使用 useMemo 的情况:
useMemo 可能是过度优化。useMemo 的依赖项经常变化,导致记忆化值频繁重新计算,这样使用 useMemo 反而会增加性能负担而非减轻。useMemo 可能不会带来实际的性能提升。useMemo 通常没有必要。使用 useMemo 的适当时机:
useMemo 可以提高性能。useMemo 可以防止不必要的子组件渲染。当用memo包裹组件后,每次渲染前会浅比较组件的prop是否有变化,如果有变化才做重新渲染