当计算结果相同时useMemo是否有用?变量变更场景缓存疑问
useMemo会重新计算,核心逻辑看这里
- 结论:这种场景下useMemo一定会重新计算,不会返回之前的缓存值。
- 关键逻辑:useMemo的缓存判断只看依赖数组里的变量是否发生值的变化,完全不关心计算结果是否和之前一致。
用实际代码示例就能直观理解:
import { useState, useMemo } from 'react'; function Demo() { const [a, setA] = useState(3); const [b, setB] = useState(2); const sum = useMemo(() => { console.log('执行加法计算'); return a + b; }, [a, b]); // 依赖数组绑定a和b // 点击按钮将a改为1、b改为4 return ( <button onClick={() => {setA(1); setB(4)}}>修改数值</button> ); }
点击按钮后,控制台会再次打印执行加法计算——这说明useMemo重新执行了回调函数,哪怕这次计算出的sum还是5。
总结来说:useMemo只认依赖项的变化,不认计算结果的重复。只要依赖列表里的任意一个值发生改变,它就会重新执行计算逻辑,再把新结果缓存起来。
内容的提问来源于stack exchange,提问作者shyvijay
相关产品推荐
相关产品推荐

