ESLint z Reactem daje błędy `no-unused-vars '

86

Skonfigurowałem eslint& eslint-plugin-react.

Kiedy uruchamiam ESLint, linter zwraca no-unused-varsbłędy dla każdego komponentu React.

Zakładam, że nie rozpoznaje, że używam składni JSX lub React. Jakieś pomysły?

Przykład:

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>
    );
  }
}

Błędy liniowe:

/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

Oto mój .eslintrc.jsonplik:

{
    "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"
        ]
    }
}
Don P.
źródło
Importujesz, Reactale go nie używasz, po prostu używasz Component, który jest poprawnie importowany.
GMaiolo
To ma sens - ale po co miałby Headerrównież błąd? (W rzeczywistości musisz zaimportować Reacta, w przeciwnym razie, gdy JSX zostanie transpiled, wyświetli się błąd)
Don P
To nie powinno się teraz dziać. Jaka jest twoja wersja eslint? github.com/eslint/eslint/issues/1905
daniloprates

Odpowiedzi:

175

W swoim .eslintrc.json, pod extends, dołącz następującą wtyczkę:

'extends': [
    'plugin:react/recommended'
]

Źródło

edwarddamato
źródło
1
Świetna odpowiedź.Oczywiście powinieneś zrobić najpierw (npm install --save-dev eslint-plugin-
act
A co jeśli korzystasz z Airbnb? Próbowałem wcześniej dodać „wtyczkę: reaguj / zalecane”, ale nie działało to: [„wtyczka: reaguj / zalecane”, „airbnb”, „airbnb / hooks”, „wtyczka: reaguj-redux / zalecane”, „wtyczka : ładniejszy / polecany "," ładniejszy /
reaguj
Oto autorytatywna dokumentacja ... github.com/yannickcr/eslint-plugin-react#recommended
Ken Lin
58

Aby rozwiązać ten jedyny problem bez dodawania nowych reguł z react/recommendedinstalacji eslint-plugin-react:

npm install eslint-plugin-react --save-dev

dodaj .eslintrc.js:

"plugins": ["react"]

i:

"rules": {   
     "react/jsx-uses-react": "error",   
     "react/jsx-uses-vars": "error" 
}
Mihey Mik
źródło
14

Ponieważ znalazłem to podczas googlowania, powinieneś wiedzieć, że ta prosta zasada wystarczy, aby zapobiec tej wiadomości:

react/jsx-uses-react

react/recommendedZestaw reguł dodaje wiele innych reguł może nie chcieć.

Fiaxhs
źródło
7

W moim przypadku musiałem dodać .eslintrc.js:

'extends': [
    'plugin:react/recommended'
]

plus specjalne poprawki, aby pozbyć się importu wstępnego: import { h } from 'preact'ale możesz użyć tego przykładu, aby pozbyć się określonych ostrzeżeń, takich jak:

    "no-unused-vars": [
        "error",
        {
            "varsIgnorePattern": "^h$"
        }
    ],
Picard
źródło
1

Najszybsza naprawa

Aby zignorować wszystkie zmienne TitleCase, dodaj to do konfiguracji ESLint:

{
    "rules": {
        "no-unused-vars": [
            "error",
            {
                "varsIgnorePattern": "^[A-Z]"
            }
        ]
    ]
}

Poprawna poprawka

Użyj eslint-plugin-act, aby zignorować zmienne React.

npm install eslint-plugin-react -D

Dodaj to do swojej konfiguracji ESLint:

{
    "plugins": [
        "react"
    ],
    "rules": {
        "react/jsx-uses-vars": "error",
        "react/jsx-uses-react": "error"
    }
}

Sugerowana poprawka

Użyj eslint-plugin-act, aby poprawić wykorzystanie JSX, a nie tylko uciszyć ten błąd.

npm install eslint-plugin-react -D

Dodaj to do swojej konfiguracji ESLint:

{
    "extends": [
        "plugin:react/recommended"
    ]
}

Jeśli używasz XO , zobacz eslint-config-xo -active .

fregante
źródło
-1

Jeśli tworzysz projekt za pomocą interfejsu CLI aplikacji create-react-app, możesz npm run ejectedytować pole package.json „eslintConfig”, na przykład:

`"eslintConfig": {
    "extends": "react-app",
    "rules": {
      "eqeqeq": "off",
      "no-unused-vars": "off",
    }
  },`

eslint zostanie zamknięty

gniazdo L.
źródło