语境
阅读有关钩子(Hook)的官方文档后,我想在我的一个项目中尝试useMemo。
为了测试它,我设置了一个沙盒项目here。
该示例在每次输入更改时都使用昂贵的计算(请参阅“失效 ms”)。每次运行此昂贵的计算时,计数器都会递增(请参阅“计数器”)。
这个示例对于memoization来说是完美的,所以我使用useMemo钩子(Hook),但是结果不是我所期望的,这使我相信我在这里从根本上误解了一些东西。
预期:
实际:
尽管输入相同,但每次&&计数器每次都会增加缓慢的计算。
同样,here是项目的链接。我的错误在哪里?
最佳答案
每次值更改时都会触发useMemo,因为您将其添加为[value]作为第二个参数。这就是为什么在输入中插入新值会导致新的计算。 useMemo用于防止不必要的计算(如果不是值(value)而是其他值)发生更改。但是,由于唯一可以改变的是您的值(value),因此您会看到每次都在进行计算。如果组件具有更多的状态/属性值,则如果这些其他状态/属性值发生更改,则将跳过计算。希望这使事情变得更清楚。快乐的编码。