Javascript I';我对将useEffect与useCallback一起使用的后果感到困惑

Javascript I';我对将useEffect与useCallback一起使用的后果感到困惑,javascript,reactjs,react-hooks,eslint,Javascript,Reactjs,React Hooks,Eslint,假设我有一个函数,其行为不会随时间而改变,并且我计划在useffecthook中使用此函数,因此我将其作为一个依赖项包含,以满足react hooks/depsESLint规则: constdosomething=useCallback((args)=>{…},[]); useffect(()=>{ doSomething(); },[doSomething]); 这是丹·阿布拉莫夫(Dan Abramov)提出的建议解决方案,目前效果良好,但我对React文档中的这些描述感到困惑: useC

假设我有一个函数,其行为不会随时间而改变,并且我计划在
useffect
hook中使用此函数,因此我将其作为一个依赖项包含,以满足
react hooks/deps
ESLint规则:

constdosomething=useCallback((args)=>{…},[]);
useffect(()=>{
doSomething();
},[doSomething]);
这是丹·阿布拉莫夫(Dan Abramov)提出的建议解决方案,目前效果良好,但我对React文档中的这些描述感到困惑:

useCallback(fn,deps)
相当于
usemo(()=>fn,deps)

您可以将
usemo
作为性能优化,而不是语义保证。将来,React可能会选择“忘记”一些以前记忆的值,并在下次渲染时重新计算这些值,例如为屏幕外组件释放内存。编写代码,使其在没有
usemo
的情况下仍能工作,然后添加代码以优化性能

阅读这些,我的印象是,没有
usemo
,上面的代码就无法工作,因为
usemo
(因此
useCallback
)是一种性能优化方法,而不是语义保证,因此
useCallback
中包装的
doSomething
函数相当于:

constdosomething=usemo(()=>(args)=>{…},[]);
它的记忆值“React可能会选择遗忘”,并且我的
useffect
回调将再次错误运行

有时我使用REF来存储一个感觉安全但又不必要的函数:

constdosomething=useRef((args)=>{…});
useffect(()=>{
doSomething.current();
}, []);

这里有什么我不知道的吗?

这里你可以读到
useCallback
useMemo
之间的区别:我了解钩子当前的工作方式(例如
useCallback
useRef
类似),但我从React文档中得到了印象,未来,
useCallback
的工作方式将类似于
usemo
(如中所述,它将是一种性能优化功能,而不是跳过重播的语义保证)。在这里,您可以了解
useCallback
usemo
之间的区别:我了解挂钩目前的工作方式,(例如:
useCallback
如何与现在的
useRef
相似),但我从React文档中得到的印象是,
useCallback
在未来的工作方式与
usemo
类似(如中所述,它将是一种性能优化功能,而不是跳过重新渲染的语义保证)。