在此GitHub issue中,我本质上建议更改:
x = useCallback( ... , []);
收件人:
x = useRef( ... ).current;
两者相同,但是使用useRef
时,React不会比较依赖关系。
对此有一个问题的答复:
是否曾经有过这样一种情况,那就是无依赖的useMemo或useCallback比useRef更好的选择?
我想不出一个,但是我可能忽略了一些用例。
那么有人能想到这种情况吗?
答案 0 :(得分:5)
每个React Hooks API文档:
请记住,当useRef的内容更改时,它不会通知您。 更改.current属性不会导致重新渲染 ...使用 回调引用可确保即使子组件显示了 稍后测量的节点(例如,响应点击),我们仍然可以 在父组件中收到有关此消息的通知,并可以更新 测量。
答案 1 :(得分:0)
尽管您可以使用useRef来模拟useCallback或使用空的依赖项,但是您不能将其用于useCallback的所有可能情况,这些情况将在任何依赖项发生变化时进行补救。
此外,如果您使用useCallback with empty dependency
或useRef,也不会带来太大的性能差异,因为它不必执行任何繁重的比较。
此外,如果您稍微更改了函数实现,以便必须在特定的参数更改时重新创建它,则可以简单地使用useCallback
更新实现,并添加额外的参数作为依赖项。但是,如果使用useRef实现它,则必须还原为useCallback
答案 2 :(得分:0)
因为useRef(()=> {...})。current的输出 是易变的。
这会在您的代码中引起怪异的副作用。 我可以随时更改current的值。 https://codesandbox.io/s/confident-monad-vjeuw
这就是不想使用useRef
的用例