据我了解, useRef 返回的容器始终相同 - 但在 useEffect 和类似函数中引用它们会导致 eslint exhausive-deps 警告。在这种情况下忽略警告是否安全?有什么好方法可以避免警告堵塞输出日志以及禁用行注释堵塞我的代码?或者我应该将它们放入依赖项列表中以使 eslint 满意?
When useRef
首先被调用它创建一个对象current
财产。该对象将在后续渲染中保持不变。即:对该对象的引用不会改变。
https://reactjs.org/docs/hooks-reference.html#useref https://reactjs.org/docs/hooks-reference.html#useref
因此,从依赖项数组中省略它是安全的。
请参阅下面的代码(也可以在沙盒链接中找到):
https://codesandbox.io/s/cocky-dhawan-ys267?file=/src/App.js https://codesandbox.io/s/cocky-dhawan-ys267?file=/src/App.js
const someRef = useRef({foo: "bar"});
let x = 1;
useEffect(() => {
console.log(someRef.current.foo);
console.log(x);
}, []); // THERE IS A WARNING HERE FOR THE "x"
eslint/exhaustive-deps
只是担心x
,而不是someRef.current.foo
.
NOTE:我刚刚把x
在那里确保警告是由 eslint 触发的。
这背后的原因是useRef
与渲染周期无关。我的意思是,它不会重新创建,也不会在每次渲染后自动更新,就像渲染期间创建的状态、道具或变量一样。
您确定收到此警告的原因是useRef
?请参阅 CodeSandbox 链接并仔细检查。检查您如何将它们引用到useEffect
并检查您的 React 和 Eslint/插件版本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)