该警告由eslint-plugin-react-hooks的react-hooks/exhaustive-deps规则触发,提示useEffect依赖数组遗漏了effect内实际使用的变量或函数,可能导致闭包陷阱或过期值问题;需检查插件安装、ESLint配置、语言模式,并通过自动修复或补全依赖、useCallback、useRef等方法正确处理。

VSCode里出现 React Hook useEffect has a missing dependency 黄色警告,不是代码运行错误,而是 ESLint 的 react-hooks/exhaustive-deps 规则在起作用——它检测到你写的 useEffect 依赖数组漏了变量或函数,可能引发闭包陷阱。
为什么VSCode会报这个黄 warning
这条提示根本不是 VSCode 自己生成的,而是由 eslint-plugin-react-hooks 插件驱动的。前提是:项目装了插件、ESLint 已启用、且当前文件被识别为 React 类型(.tsx 或 .jsx)。如果没报,大概率是插件没生效,而不是“没问题”。
-
npm list eslint-plugin-react-hooks确认已安装(2026 年推荐用 v4.6+) -
.eslintrc.cjs中必须有plugins: ['react-hooks']和rules: {'react-hooks/exhaustive-deps': 'warn'} - VSCode 设置里
eslint.enable必须为true,且工作区未禁用 ESLint - 右下角状态栏语言模式要是 TypeScript React 或 JavaScript React,不是
Plain Text或JavaScript
useEffect 依赖漏写常见形式
漏的不一定是 state 变量,更常是函数或对象引用。以下三类最典型:
- 直接读取
count却写useEffect(() => { console.log(count); }, [])——count必须进 deps - 调用了外部函数
fetchData(),而fetchData内部用了keyword,但 deps 写的是[]——fetchData必须进 deps,或改用useCallback - 传入对象如
config,但每次渲染都新建{ theme: 'dark' },导致[config]浅比较总为false—— 改用useMemo缓存,或只依赖其中某个字段如[config.theme]
怎么快速定位和修复漏依赖
别靠肉眼扫,用 VSCode 的自动修复功能:
- 把光标停在黄色波浪线下方的
useEffect上,按Cmd + .(Mac)或Ctrl + .(Win),选择 "Fix all exhaustive-deps issues" - 如果没弹出选项,说明 ESLint 没识别当前文件 —— 检查右下角语言模式,或执行
Developer: Restart Language Server - 自动修复后,留意是否引入了不必要的重渲染:比如把一个没用
useCallback包裹的函数加进 deps,会导致 effect 频繁重跑 - 对确实不该进 deps 的值(如 DOM 引用、防抖函数),可用
// eslint-disable-next-line react-hooks/exhaustive-deps抑制,但得写清楚理由
真正难的不是补上变量,而是判断“这个函数该不该稳定”。比如一个内部只读 props.id 的回调,不加 useCallback 就放进 deps,effect 每次父组件重渲染都会执行——这种隐性性能损耗,比黄 warning 更值得花时间理清。


















