【问题标题】:Do I get any performance gain from useCallback when the function is used as a private method?当函数用作私有方法时,我是否从 useCallback 获得任何性能提升?
【发布时间】:2021-07-08 11:06:14
【问题描述】:

React 的 useCallback 钩子在将生成的(记忆的)函数传递给子组件时提供了性能提升,以避免不必要的重新渲染。

当钩子用作内部(“私有”)函数时,我能获得任何性能提升吗? 例如:

function Foo({numbers}) {

  const dep1 = React.useMemo(() => {......}, [....])
  const calc = React.useCallback((a) => a * dep1, [dep1])

  return (
    <>
      {numbers.map((num) => (
        <div key={num}>
          Num: {num}, Calculated: {calc(num)}
        </div>
      ))}
    </>
  );
}

或者做一个简单的

const calc = (a) => a * dep1

这种情况是一样的吗?

换句话说,既然useCallback是在记忆函数引用,而不是函数本身,那么在不将它作为prop传递时我是否必须使用它?

【问题讨论】:

    标签: reactjs memoization usecallback


    【解决方案1】:

    对于本地使用(组件内部)useCallback 字面意思是doesn't make 任何改进。它会在每次重新渲染时被调用,即使它会从内存中获取一个原始函数对象,它仍然会重新创建内联函数。

    但是,如果 useMemo 缓存从一些繁重的计算中接收到的值,则它可能有意义。它使用了记忆化原则,这对于避免冗余的繁重操作很有用。

    附言

    值得注意的是,使用 useCallback 包装私有方法的唯一合理用例是如果(出于任何原因)您要将此方法放入 useEffect 依赖项中。

    【讨论】:

      猜你喜欢
      • 2013-11-22
      • 1970-01-01
      • 2011-09-06
      • 1970-01-01
      • 2016-05-15
      • 2021-07-21
      • 1970-01-01
      • 1970-01-01
      • 2012-03-18
      相关资源
      最近更新 更多