useMemo或useCallback VS useRef的空依赖关系

Izh*_*aki 7 reactjs react-functional-component

在这个GitHub问题中,我基本上建议更改:

x = useCallback( ... , []);
Run Code Online (Sandbox Code Playgroud)

至:

x = useRef( ... ).current;
Run Code Online (Sandbox Code Playgroud)

两者相同,但是使用useRefReact不会比较依赖关系。

为此,有一个问题的答复:

有没有一种情况,没有依赖的useMemo或useCallback比useRef更好的选择?

我想不出一个,但我可能忽略了一些用例。

那么有人能想到这种情况吗?

ira*_*una 5

每个React Hooks API文档:

请记住,useRef的内容更改时不会通知您。 更改.current属性不会导致重新渲染 ...使用回调ref可以确保即使子组件稍后显示了测得的节点(例如,响应单击),我们仍然会在父组件中收到有关它的通知。组件并可以更新测量值。

您可以在这里这里阅读更多有关它的信息

  • `useRef` 永远不会重新计算 - 它总是返回初始值。 (2认同)

Shu*_*tri 1

虽然您可以使用 useRef 来模拟 useCallback 或使用空依赖项,但您不能将它用于 useCallback 的所有可能场景,即在任何依赖项更改时重新记忆。

另外,如果您使用或 useRef ,它不会产生太大的性能差异,useCallback with empty dependency因为它不必执行任何繁重的比较。

此外,如果您稍微更改函数实现,以便必须在特定参数更改时重新创建它,您可以简单地更新实现并useCallback添加额外的参数作为依赖项。但是,如果您使用 useRef 实现它,则必须恢复到useCallback

  • @Izhaki我知道你的问题是严格的空依赖关系,这就是为什么我提到空依赖关系没有任何区别。但是当您尝试添加更多更改时,您可能需要相当多的重构 (2认同)