我正在使用react 16.8和eslint-plugin-react-hooks 1.6.0。当我有条件地使用钩子时,我希望eslint可以警告我。有我的配置:
focusProperty
如果我在自定义钩子中有条件地使用钩子,则会出现这样的警告:“有条件地调用React Hook \“ useState \”。在每个组件渲染中必须以完全相同的顺序调用React Hooks。” >
ChangeListener
但是如果我在函数组合中使用钩子,它将无法正常工作。
"eslintConfig": {
"parser": "babel-eslint",
"plugins": [
"react-hooks"
],
"rules": {
"react-hooks/rules-of-hooks": "error",
"react-hooks/exhaustive-deps": "warn"
}
}
答案 0 :(得分:2)
这对我有用:
$ npm i --save-dev eslint-plugin-react-hooks
{
"plugins": [
...
"react-hooks"
],
"rules": {
...
"react-hooks/rules-of-hooks": "error",
"react-hooks/exhaustive-deps": "warn"
}
...
$ npm i --save-dev eslint-config-react-app
{
...
"extends": "react-app"
$ npm i --save-dev eslint-plugin-flowtype
$ npm i --save-dev eslint@^5.0.0
答案 1 :(得分:1)
实际上,当我将您的函数粘贴到由create-react-app创建的App.js文件上时,运行该应用程序时会出现预期的错误。
也许您的函数不被视为React组件(您的函数被视为通用函数)。确保您对范围(import React from "react";
)有反应
答案 2 :(得分:0)
您不应在条件内使用钩子。这将导致错误,因为唯一的反应就是知道如何将有状态值与变量关联,这是按顺序进行的,在这种情况下,这是不一致的。
签出文档,他们阐明钩子规则。 https://reactjs.org/docs/hooks-rules.html
您想要的就是这样
const [a, setA] = useState(initialVal)
if (Math.random() > 0.5){
setA(0)
}
答案 3 :(得分:0)
您的eslint配置对我也不起作用,但是此功能可以做到:
"eslintConfig": {
"extends": "react-app"
}
答案 4 :(得分:0)
我添加了以下依赖项:@typescript-eslint/eslint-plugin
和@typescript-eslint/parser
到package.json
,并将以下内容添加到.eslintrc.js
:
extends: [... 'plugin:@typescript-eslint/recommended', 'plugin:react-hooks/recommended']
parser: '@typescript-eslint/parser',
plugins: [..., '@typescript-eslint'],