来一句长长的感叹,众所周知啊,useMemo和useCallback都是用来做缓存的,性能优化的,什么时候使用useMemo,什么时候使用useCallback呢
useMemo
简单一句来讲:用于缓存昂贵的计算结果,在确保依赖没有变化时,不会重新计算。它适合用于复杂且大量计算且耗时的逻辑。一加到一百,每次增长一的累加你觉得数据量大不大,如果觉得不大,那你每次增长0.1的累加,实在不行0.00000000000001的累加到一百,我就不信你还说这个例子计算量不大。
1.当组件中有一个结果是根据大量计算得到的,且每次render不需要结果重新计算用它。
2.当自身是引用类型且会被其他hooks依赖时用它
3.当数据是引用类型且传递给子组件时不需要重新渲染用它。
useCallback
用于缓存一个函数,在依赖不变的情况下,组件每次重新渲染,不会创建新的函数引用,在子调父的回调函数中,使用useCallback可以有效的避免调用引起的重新渲染。
说多了都是无用功,来来来,我们上总结:用于缓存结果使用useMemo,用于缓存函数使用useCallback。
在不确定的情况下我们随便使用行不行,当然行啦,功能是没问题的,但是性能就不一定了。就好像你晚上喝茶喝咖啡一样,晚上随便喝喝行不行,当然行,身体是没问题的,但是精神有没有问题那就只有你自己知道了。这里我们开了一个小小的玩笑啊。功能好比身体,性能好比衣服,穿的破破烂烂的也可以在大街上行走,穿的光鲜亮丽的也可以成为一道风景线。看你自己的需求,实在没啥要求的我建议这个hooks学都不要学,反正性能好坏都是那样,你也不会在乎,干什么还学这两个hooks,来浪费自己的脑容量。仔细一想,道理是这个道理,我开发的功能又不是我用,性能好坏的我不在乎,但是你有没有想过,你拎着一大包钱去银行存钱,周围一堆小偷盯着你,就盼着你存不进去,只有你自己急切地渴望快点存进去,因为下一秒,钱有可能就是别人的了,此时存钱的界面一直提示你,请稍等,系统正在检验,每过一秒钟,心中有一万个nimade在涌上嘴边,你会不会因为这个系统的性能有个想把机器按烂了的冲动。哈哈哈。唉~。