React中useMemo不传依赖数组与传入空依赖数组的区别是什么
两种useMemo写法的区别
两种写法的执行逻辑和实际作用完全不同:
- 无依赖数组的写法:
const value = useMemo(() => {...})
每次组件重新渲染时,useMemo包裹的回调都会重新执行一次,返回的计算结果也会同步更新。这种写法完全没有发挥useMemo的缓存作用,和你直接在组件内写const value = 计算逻辑没有任何差异,属于不符合React规范的错误用法,在严格模式下可能直接抛出语法警告。 - 空数组作为依赖的写法:
const value = useMemo(() => {...}, [])
仅在组件首次挂载渲染时执行一次回调计算结果,后续不管组件因为什么原因触发重渲染,都会直接复用第一次的缓存结果,不会再重新执行回调逻辑。这种写法通常用来声明仅需要计算一次的常量值。
额外提示:React官方明确要求useMemo、useCallback、useEffect这类依赖型Hook必须传入第二个依赖参数,缺失依赖参数的写法不被官方支持,不要在正式项目中使用。
内容的提问来源于stack exchange,提问作者Raul
相关产品推荐
相关产品推荐

