【发布时间】:2020-02-25 10:21:57
【问题描述】:
我最近正在使用 React Hooks 重构一个 Web 应用程序。我遇到了关于useCallback 的问题。根据 Kent 的描述:https://kentcdodds.com/blog/usememo-and-usecallback,useCallback 是将相同的函数引用传递给子组件,避免子组件的重新渲染,从而使性能更好。但是,它与React.memo 一起使用。正如肯特所说:
大多数情况下,您不应该费心优化不必要的渲染。 React 非常快,我能想到的有很多事情可以让你用你的时间来做,这比优化这样的事情要好。事实上,用我将要展示给你的东西来优化东西的需求是如此罕见,以至于我实际上从来不需要这样做......
所以,我的问题是:我是否有权声称我们通常不需要使用useCallback?除非回调的创建成本很高,否则使用 useCallback 可以避免为每个渲染重新创建回调。
说,对于onClick 或onChange 事件处理程序,2 行或更少,我们是否应该不使用useCallback 来包装它?
【问题讨论】:
-
Kent 的文章大致总结了同样的结论
-
我发现唯一需要它的情况是,回调最终是否变成了使用备忘录或使用效果
-
既然这是肯特的观点,我会给出相反的观点。当使用重选和纯组件时,不使用 useCallback 是没有意义的,因为不使用它会使纯组件和从状态中记忆计算的道具无用。当组件没有任何变化时重新渲染组件也会使调试变得困难。
-
我认为他不使用它的主要原因是:
it can be tricky to get right all the time so you may not be reaping any benefits at all anyway.换句话说; “这很难,所以不要打扰”。我确实同意这很困难,但是当您定义容器/展示组件并在容器中使用选择器时会容易得多(无论如何您都应该这样做)。
标签: reactjs react-hooks usecallback