React之React-eslint報錯(React Hook "useEffect" is called in function "routeClass3" which is neither a React function component or a custom React Hook function react-hooks/rules-of-hooks)


 1.eslint去掉注釋報錯:// eslint-disable-next-line react-hooks/rules-of-hooks

在使用react hook時會遇到一些問題,就是在使用hook的一些api時就會出現如下所示報錯,使用vscode的自動修復就是加上注釋,但是每用一次就加一次注釋非常麻煩

 

問題是:使用組件和props編譯報錯

錯誤信息如下

 React Hook "useEffect" is called in function "xxxxxx" which is neither a React function component or a custom React Hook function  react-hooks/rules-of-hooks

根本原因 : 因為你的命名不規范,首字母應該是大寫

  1. 組件命名大寫
  2. interface聲明props時需要大寫

其實將命名規范了就可以,如果怕有遺漏導致報錯,可以加如下的文件徹底解決

解決方法

1.安裝依賴

 

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


# yarn
yarn add eslint-plugin-react-hooks --dev

2.添加一個文件.eslintrc.json

{
  "env": {
    "browser": true,
    "node": true,
    "es6": true
  },
  "parserOptions": {
    "ecmaVersion": 2018,
    "sourceType": "module",
    "ecmaFeatures": {
      "jsx": true
    }
  },
  "parser": "@typescript-eslint/parser",
  "extends": [
    "eslint:recommended",
    "plugin:react/recommended",
    "plugin:@typescript-eslint/recommended",
    "prettier/@typescript-eslint",
    "plugin:prettier/recommended"
  ],
  "plugins": ["@typescript-eslint", "react", "prettier", "react-hooks"],
  "rules": {
    "prettier/prettier": [
      "error",
      {
        "singleQuote": true
      }
    ],
    "@typescript-eslint/interface-name-prefix": 0,
    "react/prop-types": [0],
    "no-console": "off",
    "eqeqeq": ["error", "always"],
    "jsx-a11y/anchor-is-valid": "off",
    "@typescript-eslint/camelcase": "off",
    "@typescript-eslint/explicit-function-return-type": "error",
    "react-hooks/rules-of-hooks": "error", // 檢查 Hook 的規則
    "react-hooks/exhaustive-deps": "warn", // 檢查 effect 的依賴
    "no-debugger": "off"
  },
  "settings": {
    "react": {
      "pragma": "React",
      "version": "detect"
    }
  }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM