带有React的ESLint给出了"no-unused-vars"错误

Don*_*n P 62 javascript jsx reactjs eslint

我设置eslinteslint-plugin-react.

当我运行ESLint时,linter返回no-unused-vars每个React组件的错误.

我假设它没有意识到我正在使用JSX或React语法.有任何想法吗?

例:

app.js

import React, { Component } from 'react';
import Header from './header.js';

export default class App extends Component {
  render() {
    return (
      <div>
        <Header />
        {this.props.children}
      </div>
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

Linter错误:

/my_project/src/components/app.js
  1:8  error  'React' is defined but never used   no-unused-vars
  2:8  error  'Header' is defined but never used  no-unused-vars
Run Code Online (Sandbox Code Playgroud)

这是我的.eslintrc.json档案:

{
    "env": {
        "browser": true,
        "es6": true
    },
    "extends": "eslint:recommended",
    "parserOptions": {
        "ecmaFeatures": {
            "experimentalObjectRestSpread": true,
            "jsx": true
        },
        "sourceType": "module"
    },
    "plugins": [
        "react"
    ],
    "rules": {
        "react/jsx-filename-extension": [1, { "extensions": [".js", ".jsx"] }],
        "indent": [
            "error",
            2
        ],
        "linebreak-style": [
            "error",
            "unix"
        ],
        "quotes": [
            "error",
            "single"
        ],
        "semi": [
            "error",
            "always"
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

edw*_*ato 126

在您的.eslintrc.json,在extends,包括以下插件:

'extends': [
    'plugin:react/recommended'
]
Run Code Online (Sandbox Code Playgroud)

资源

  • 一个狡辩,如果这是在 json 文件(`.eslintrc.json`)中,那些不应该用双引号引起来吗? (3认同)
  • 很好的答案。当然你应该先做(npm install --save-dev eslint-plugin-react) (2认同)
  • 我的 eslintrc 扩展了 `plugin:react/recommended`,但它仍然给我这个警告。我认为这是因为我在一个带有简单 .js 扩展名的文件中使用 React。当我为文件提供 .jsx 扩展名时,警告就会消失。 (2认同)

Mih*_*Mik 38

要在不添加react/recommended安装新规则的情况下解决此问题eslint-plugin-react:

npm install eslint-plugin-react --save-dev
Run Code Online (Sandbox Code Playgroud)

加入.eslintrc.js:

"plugins": ["react"]
Run Code Online (Sandbox Code Playgroud)

和:

"rules": {   
     "react/jsx-uses-react": "error",   
     "react/jsx-uses-vars":
     "error" 
}
Run Code Online (Sandbox Code Playgroud)

  • 您不应该使用`--save-dev`吗? (4认同)
  • 这对我不起作用,我仍然收到来自 no-unused-vars 的警告 (3认同)

小智 11

由于我在谷歌搜索时发现了这一点,你应该知道这个简单的规则足以阻止这个消息:

react/jsx-uses-react
Run Code Online (Sandbox Code Playgroud)

react/recommended组规则增加了许多其他的规则,你可能不希望.


小智 8

2022年

如果您使用具有更多配置的 ESLint,请注意属性数组的顺序extends

{
    extends: [
        'eslint:recommended',
        'plugin:react/jsx-runtime',
        'plugin:react/recommended',
        'plugin:prettier/recommended',
        'prettier',
      ],
      plugins: ['react'],

   //...
}
Run Code Online (Sandbox Code Playgroud)

例如,确保放置'plugin:react/recommended'在任何其他反应配置之后。也作为插件放置'react',如果您使用 prettier,请确保遵循正确的配置。

  • 这帮助我解决了未使用的 React var eslint 问题。我按照建议将“plugin:react/jsx-runtime”移到了“plugin:react/recommended”之前,问题得到了解决。谢谢。 (2认同)

fre*_*nte 7

最快的修复

要忽略所有 TitleCase 变量,请将其添加到您的 ESLint 配置中:

{
    "rules": {
        "no-unused-vars": [
            "error",
            {
                "varsIgnorePattern": "^[A-Z]"
            }
        ]
    ]
}
Run Code Online (Sandbox Code Playgroud)

正确修复

使用eslint-plugin-react忽略 React 变量。

{
    "rules": {
        "no-unused-vars": [
            "error",
            {
                "varsIgnorePattern": "^[A-Z]"
            }
        ]
    ]
}
Run Code Online (Sandbox Code Playgroud)

将此添加到您的 ESLint 配置中:

{
    "plugins": [
        "react"
    ],
    "rules": {
        "react/jsx-uses-vars": "error",
        "react/jsx-uses-react": "error"
    }
}
Run Code Online (Sandbox Code Playgroud)

建议修复

使用eslint-plugin-react来改善你的 JSX 使用,而不仅仅是为了消除这个错误。

npm install eslint-plugin-react -D
Run Code Online (Sandbox Code Playgroud)

将此添加到您的 ESLint 配置中:

{
    "extends": [
        "plugin:react/recommended"
    ]
}
Run Code Online (Sandbox Code Playgroud)

如果您使用XO,请参阅eslint-config-xo-react

  • 如果您想使用“varsIgnorePattern”修饰符,您只需将“React”作为模式即可。至少就我而言,问题是我在每个文件中导入 React,如果我使用功能组件等,我的 linter 就会抱怨。比我更有经验的人可能会告诉我这是否会导致意外问题。 (2认同)
  • 好建议。我正在考虑忽略所有 JSX 组件,但这不是必需的。 (2认同)

Pic*_*ard 5

就我而言,我需要添加.eslintrc.js

'extends': [
    'plugin:react/recommended'
]
Run Code Online (Sandbox Code Playgroud)

加上特定的调整以消除之前的导入:import { h } from 'preact'但是您可以使用此示例摆脱特定的警告,如下所示:

    "no-unused-vars": [
        "error",
        {
            "varsIgnorePattern": "^h$"
        }
    ],
Run Code Online (Sandbox Code Playgroud)