在代码审阅过程中,常发现滥用useMemo和useCallback这两个API的现象。实际使用中,它们并非所有场合都必要。以下通过具体例子进行探讨。举个例子,有人使用useMemo缓存数组长度判断,这里问是否真的需要。我的观点是,useMemo应用于复杂计算逻辑的缓存,而非简单逻辑,如判断数组长度。同事提出,不使用useMemo会导致重复渲染,为何不用?我的回复是,这非useMemo问题,应审视组件过大原因,考虑拆分小组件。useCallback容易被过度使用,常见误解是仅为避免渲染时创建匿名函数。实际,useCallback用于缓存函数,防止子组件的memo失效,而非单纯避免匿名函数创建。有开发者出现过使用useCallback却无实际作用的情况。正确的使用方式是,对复杂计算使用useMemo缓存结果,避免重复计算;对防止子组件memo失效使用useCallback缓存函数。