在这个GitHub 问题中,我基本上建议更改:
x = useCallback( ... , []);
到:
x = useRef( ... ).current;
两者相同,但useRef
React 不比较依赖项。
对此,有一个问题的答复:
是否存在无依赖的 useMemo 或 useCallback 比 useRef 更好的选择的情况?
我想不出一个,但我可能忽略了一些用例。
那么有人能想到这样的情况吗?
在这个GitHub 问题中,我基本上建议更改:
x = useCallback( ... , []);
到:
x = useRef( ... ).current;
两者相同,但useRef
React 不比较依赖项。
对此,有一个问题的答复:
是否存在无依赖的 useMemo 或 useCallback 比 useRef 更好的选择的情况?
我想不出一个,但我可能忽略了一些用例。
那么有人能想到这样的情况吗?
虽然您可以使用 useRef 来模拟 useCallback 或使用空依赖项,但您不能将它用于 useCallback 的所有可能场景,即在任何依赖项更改时重新记忆。
此外,如果您使用useCallback with empty dependency
或 useRef,它不会对性能产生太大影响,因为它不必执行任何繁重的比较。
此外,如果您稍微更改函数实现,以便您必须在特定参数更改时重新创建它,您可以简单地更新实现useCallback
并添加额外的参数作为依赖项。但是,如果您使用 useRef 实现它,则必须恢复到useCallback
因为 useRef(() => {...}).current 的输出是可变的。
这可能会在您的代码中导致奇怪的副作用。我可以随时更改 current 的值。 https://codesandbox.io/s/confident-monad-vjeuw
这将是不想使用 useRef 的用例