繁体   English   中英

是否应该将 refs 列为 useEffect 等的依赖项?

[英]Should refs be in listed as dependencies for useEffect and such?

据我了解,useRef 返回的容器总是相同的——但在 useEffect 和类似函数中引用它们会导致 eslint 详尽的deps 警告。 在这种情况下忽略警告是否安全,以及避免使用警告阻塞 output 日志和禁用行注释的代码的好方法是什么? 或者我应该将它们放入依赖列表中以保持 eslint 快乐?

首次调用useRef时,它会创建一个具有current属性的 object。 此 object 在后续渲染中将保持不变。 即:对这个 object 的引用不会改变。

https://reactjs.org/docs/hooks-reference.html#useref

在此处输入图像描述

所以从依赖数组中省略它是安全的。

请参阅下面的代码(也可在 Sandbox 链接中找到):

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

在此处输入图像描述

注意:我刚刚把x放在那里以确保警告是由 eslint 触发的。

这背后的原因是useRef与渲染周期无关。 我的意思是,它不会重新创建,也不会在每次渲染后自动更新,例如 state,渲染期间创建的道具或变量通常是。

你确定你收到这个useRef的警告吗? 查看 CodeSandbox 链接并仔细检查。 检查您如何将它们引用到useEffect ,并检查您的 React 和 Eslint/plugin 版本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM