代码之家  ›  专栏  ›  技术社区  ›  Ilja

把我所有的反应成分记忆起来是个好主意吗?

  •  -1
  • Ilja  · 技术社区  · 7 年前

    我最近决定刷新React的文档并发现 https://reactjs.org/docs/react-api.html#reactmemo (反应,备忘录)。

    乍一看,它似乎是我所有功能组件的一个很好的候选者。所以我就这样申请了 memo 它们都是。

    我不确定我是否能注意到戏剧性的性能提升,但它肯定不会使任何事情变慢。

    因此,问题是:我是否应该在默认情况下将备忘录应用于所有功能组件,以防万一,以便捕获重新呈现大量元素的边缘情况?这方面有什么缺点吗?还有什么我需要注意的吗?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Raphael Rafatpanah    7 年前

    不,默认情况下您不应该将所有的功能组件都记下来。您应该根据具体情况决定何时执行此操作。

    1。它只适用于“纯”功能组件(如,没有副作用)

    从文档中:

    如果函数组件在相同的属性下呈现相同的结果,则可以将其包装在一个call to react.memo中,以便在某些情况下通过记忆结果来提高性能。

    假设您向函数组件添加了一些副作用,例如,从 Date.now() . 第一次使用某些属性调用组件时,它将按预期工作,但下次使用这些属性调用组件时,将使用旧时间。这会导致混淆的错误。

    2。并非所有纯功能组件都能从记忆化中受益。

    例如,如果不太可能用相同的属性调用组件,那么记住结果可能会导致 更糟的 性能。毕竟,memoization只是存储对对象的函数调用的结果,其中键是从函数的输入派生的,值是函数调用的结果。如果你不使用它,为什么要保存它?

    三。记忆化对于计算密集的函数更有用。

    如果函数组件不需要很多CPU周期来呈现,那么任何性能优化都可能是微不足道的。但是现在可以在以后为组件添加副作用,忘记它被记忆化,并浪费时间修复由此产生的错误。

    同样,从文档中:

    此方法仅作为性能优化存在。不要依赖它来防止渲染,因为这会导致错误。