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

时间:2019-11-04 17:25:13

标签: reactjs react-hooks

我遇到一个问题,即功能组件内部的(伪)长期运行/昂贵的功能似乎没有被记住,我会怎么想。

根据我对记忆的理解,以相同的param值调用记忆的函数只会返回上一次调用的结果。

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

要么我没有正确的东西,要么我对useMemo的功能的理解不正确(这是React.memo进入的地方吗?)。

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

谁能告诉我我要去哪里错了。

1 个答案:

答案 0 :(得分:2)

您在想什么,您可以说50%正确。

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

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

在您的示例中,当您单击+和-按钮时,您正在从先前的值更改value的值。 在第二次单击时,如果您返回相同的值,则并不意味着备忘录将在执行该功能时返回任何值。

尝试添加按钮,然后单击它,将其设置为相同的当前值setValue(value),您将看到没有进行重新计算。