React useMemo hook 是否应该记住具有相同依赖值的重复调用?

ble*_*nko 3 reactjs react-hooks

我有一个问题,功能组件中的(假)长时间运行/昂贵的函数似乎没有像我想象的那样被记忆。

根据我对记忆化的理解,调用具有相同参数值的记忆化函数只会返回前一次调用的结果。

当组件上的值发生变化但不在依赖项列表中时,这只会发生在 useMemo(至少在我的应用程序中)。我知道不同的值需要再次重新运行昂贵的函数,但即使我使用以前使用的值(值/原始类型,而不是引用类型/对象)调用该函数,它也会再次运行昂贵的函数。

要么我不太正确,要么我对 useMemo 功能的理解不太正确(这是 React.memo 的用武之地吗?)。

这可以在这个基本的stackblitz 中看到。

谁能告诉我我哪里出错了。

小智 8

你在想的是你能说 50% 正确。

useMemo 不会为同一组参数再次执行代码,但是

它只记住参数的最后一个值。

在您的示例中,当您单击 + 和 - 按钮时,您正在更改value上一个值的值。在第二次单击时,如果您返回相同的值,这并不意味着 memoize 将在不执行该函数的情况下返回值。

尝试添加一个按钮并单击它设置相同的当前值setValue(value),您将看到没有重新计算发生。

  • 感谢那。然而,我不禁认为这个术语名称有点误导,因为它并没有真正记住结果——它只是一种变化检测技术。也就是说,只要我知道,我就可以使用它。 (2认同)