简体   繁体   English

ESLint 抱怨从未使用过本地 state 变量 no-unused-vars

[英]ESLint complains that a local state variable is never used no-unused-vars

The issue:问题:

ESLint is emitting a "X is assigned a value but never used. eslint(no-unused-vars)" error in VSCode: ESLint 在 VSCode 中发出“X 被赋值但从未使用过。eslint(no-unused-vars)”错误:

没有未使用的变量

no-unused-vars rule. no-unused-vars规则。

But the variable is being referenced inside this jsx part:但是这个 jsx 部分中引用了该变量: 在此处输入图像描述

I added the rules that should tell eslint to behave correctly when it comes to JSX: (.eslintrc.json part)我添加了应该告诉 eslint 在涉及 JSX 时行为正确的规则:(.eslintrc.json 部分)

  "extends": [
    "eslint:recommended",
    "plugin:react/recommended",
    "plugin:import/errors",
    "plugin:jsx-a11y/recommended",
    "plugin:react-hooks/recommended",
    "prettier",
    "prettier/react"
  ],
  "plugins": ["react", "import", "jsx-a11y", "react-hooks"],
  "rules": {
    "react/prop-types": 0,
    "react/jsx-uses-react": 1,
    "react/jsx-uses-vars": 1,
    "no-console": 1,
    "react-hooks/rules-of-hooks": "error",
    "react-hooks/exhaustive-deps": "warn"
  },

Relevant data:相关数据:

The React component...反应组件...

import React, { useState } from 'react';
import { ANIMALS as kANIMALS } from '@frontendmasters/pet';

const SearchParams = () => {
  const [location, setLocation] = useState('Seattle, WA');
  const [animal, setAnimal] = useState('Animal');

  return (
    <div className="search-params">
      <form>
        <h1>{location}</h1>
        <label htmlFor="">
          Location
          <input
            id="location"
            type="text"
            value={location}
            placeholder="Location"
            onChange={(evt) => setLocation(evt.target.value)}
          />
        </label>
        <label htmlFor="animal">
          <select
            name="animal"
            id="animal"
            onBlur={(evt) => setAnimal(evt.target.value)}
          >
            <option value="All">All</option>
            {kANIMALS.map((animal) => (
              <option key={animal} value={animal}>
                {animal}
              </option>
            ))}
          </select>
        </label>
        <button>Submit</button>
      </form>
    </div>
  );
};

export default SearchParams;

the.eslintrc.json file .eslintrc.json 文件

import React, { useState } from 'react';
import { ANIMALS as kANIMALS } from '@frontendmasters/pet';

const SearchParams = () => {
  const [location, setLocation] = useState('Seattle, WA');
  const [animal, setAnimal] = useState('Animal');

  return (
    <div className="search-params">
      <form>
        <h1>{location}</h1>
        <label htmlFor="">
          Location
          <input
            id="location"
            type="text"
            value={location}
            placeholder="Location"
            onChange={(evt) => setLocation(evt.target.value)}
          />
        </label>
        <label htmlFor="animal">
          <select
            name="animal"
            id="animal"
            onBlur={(evt) => setAnimal(evt.target.value)}
          >
            <option value="All">All</option>
            {kANIMALS.map((animal) => (
              <option key={animal} value={animal}>
                {animal}
              </option>
            ))}
          </select>
        </label>
        <button>Submit</button>
      </form>
    </div>
  );
};

export default SearchParams;

the package.json dependencies package.json 依赖项

  "devDependencies": {
    "eslint": "^7.1.0",
    "eslint-config-prettier": "^6.11.0",
    "eslint-plugin-import": "^2.20.2",
    "eslint-plugin-jsx-a11y": "^6.2.3",
    "eslint-plugin-react": "^7.20.0",
    "eslint-plugin-react-hooks": "^4.0.2",
    "parcel-bundler": "^1.12.4",
    "prettier": "^2.0.5"
  },
  "dependencies": {
    "@frontendmasters/pet": "^1.0.3",
    "react": "^16.13.1",
    "react-dom": "^16.13.1"
  }

ESLint complains that a local state variable is never used no-unused-vars ESLint 抱怨从未使用过本地 state 变量 no-unused-vars

The scope of the animal inside the map() is different to that of the animal state variable. map()animal animal变量的不同。

const [animal, setAnimal] = useState('Animal'); // state variable (component scope)

vs.对比

{kANIMALS.map((animal) => (
  <option key={animal} value={animal}> // map scope
    {animal}
  </option>
))}

This is commonly known as variable shadowing and can be detected via no-shadow rule.这通常称为可变阴影,可以通过no-shadow规则检测到。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Eslint with Vue 给出 function 已定义但从未使用过 no-unused-vars - Eslint with Vue gives function is defined but never used no-unused-vars ESLint no-unused-vars和no-undef错误但使用了变量 - ESLint no-unused-vars and no-undef error but variable is used @typescript-eslint/eslint-plugin 错误:定义了“路由”但从未使用过(no-unused-vars) - @typescript-eslint/eslint-plugin error: 'Route' is defined but never used (no-unused-vars) 定义了“ stringValues”,但从未使用过no-unused-vars - “stringValues” is defined but never used no-unused-vars 定义了“标头”,但从未使用过未使用的变量 - 'Header' is defined but never used no-unused-vars &#39;Home&#39; 已定义但从未使用 no-unused-vars&quot;.* - 'Home' is defined but never used no-unused-vars".* &#39;UserInput&#39; 已定义但从未使用过 no-unused-vars &#39;UserOutput&#39; 已定义但从未使用过 no-unused-vars - 'UserInput' is defined but never used no-unused-vars 'UserOutput' is defined but never used no-unused-vars ESLint给出“ no-unused-vars”错误,用于实例化变量然后分配值 - ESLint giving 'no-unused-vars' error for instantiating variable and then assigning value &#39;inStock&#39; 被赋值但从未使用过 no-unused-vars - 'inStock' is assigned a value but never used no-unused-vars 11:5 错误“路由器”被分配了一个值,但从未使用过 no-unused-vars - 11:5 error 'router' is assigned a value but never used no-unused-vars
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM