规则“react-hooks/exhaustive-deps”的定义未找到。

58
在我的代码中添加 // eslint-disable-next-line react-hooks/exhaustive-deps 后,我收到了以下的eslint错误信息。

8:14 error Definition for rule 'react-hooks/exhaustive-deps' was not found

我参考了这篇文章来解决这个问题,但所提到的解决方案在我的情况下不起作用。有没有什么方法可以抑制这个eslint错误?
PS:我同时使用standardjs
6个回答

113

通常发生这种情况是因为在.eslintrc插件配置中缺少react-hooks插件。请确保您已经按照以下示例添加了react-hooks

"plugins": ["react", "react-hooks",],

6
这个回答应该被认为是被接受的答案。 - SunshinyDoyle
1
如果我没有 .eslintrc 文件,我可以创建一个 .eslintrc 文件并在其中添加 "plugins": ["react", "react-hooks"] 吗?我应该把它放在哪个目录下? - jjzjx118_2
https://www.npmjs.com/package/eslint-plugin-react-hooks 提供了几乎所有你需要了解的关于配置的信息。 - Geeganage
这个放在哪个文件夹里? - Petrus Theron
这个放在哪个文件夹里? - undefined

8

请确保您在扩展和插件数组中都像这样定义您的React Hooks:

"extends": [
    "react-hooks",
  ],
  "plugins": [
    "react-hooks"
  ],

1
这给我创建了一个错误:在'.eslintrc.js'中声明的插件'react-hook'加载失败:找不到模块'eslint-plugin-react-hook' - Sasha Davydenko
6
这是不正确的。请勿进行扩展操作。请遵循官方指南:https://reactjs.org/docs/hooks-rules.html。 - oyalhi
官方指南非常有用。 - Sealey Wang

5

请确保您已将规则放入您的.eslintrc文件中的rules对象中。仅安装插件不足以启动规则工作。

"react-hooks/exhaustive-deps": "warn",

我假设你已经在.eslintrcplugins数组中添加了react-hooks插件。


"react-hooks/exhaustive-deps": "off""react-hooks/exhaustive-deps": 0 可以全局禁用吗? - Taylor Austin
嗨,泰勒,是的,“off”和0都应该可以用来禁用规则。这取决于你在这种情况下所指的“全局”是什么。如果eslint配置文件在你的应用程序文件夹中,那么它将关闭应用程序工作区的规则;如果它是一个全局配置并且用于许多项目,则会全局禁用它。 - Mark Shulhin

2

请将以下代码添加到package.json文件中:

"eslintConfig": {
  "extends": "react-app"
}

2
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community
这对我有效,create-react-app版本5.0.1,react 17。 - Nigel Savage

2
假设您正在使用 vscode,并且您在 package.json 中有必要的包,例如 "eslint-plugin-react-hooks": "^4.3.0", 并且在您的 eslintrc.js 文件中已经按照其他答案所建议的进行了配置,那么您可能只需要简单地 重新启动
cmd/ctrl + shift + P 执行 ESLint: Restart ESLint Server

1

并不是完美的解决方案,但可以改变:

// eslint-disable-next-line react-hooks/exhaustive-deps

to:

// eslint-disable-next-line

抑制了该错误。


15
我建议不要使用 // eslint-disable-next-line,因为这会完全禁用以下行的所有ESLint规则。 - Erik Töyrä Silfverswärd
1
同意,禁用应该尽可能具体,仅针对真正需要禁用的规则。这不应被视为解决方案。 - SunshinyDoyle
这不应该被接受作为答案。这是一个非常糟糕的建议,特别是对于这个lint问题。 - jens
// eslint-disable-next-line 不应该用于禁用,因为这会禁止捕获其他规则违规 - AbhishekGowda28

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接