在使用 Babel 编写 React 代码时,ESLint 报出的错误如何处理?

阅读时长 4 分钟读完

在前端开发中,React 已经成为了很多团队首选的框架,而 Babel 则是使用最广泛的编译工具。虽然使用 Babel 能够使我们编写时使用最新的 ECMAScript 语法,同时也能够使用一些实验性质的语言特性,但是这也会导致在使用 ESLint 进行代码检查时产生很多错误提示信息。本篇文章将会介绍如何使用 ESLint 对 Babel 编写的 React 代码进行检查,并且解决常见的错误提示信息。

配置 ESLint

在开始前,需要确保项目中已经安装了 ESLint,并且安装了相应的插件用于支持 Babel,比如 babel-eslint。在项目根目录下新建一个 .eslintrc 的文件,并添加以下内容:

-- -------------------- ---- -------
-
  ---------- ---------------------- ----------------------------
  --------- ---------------
  ------ -
    ---------- -----
    ----------- -----
    ------ ----
  --
  -------- -
    ------------------- -
  -
-
展开代码

这份配置文件中,extends 中除了默认的推荐规则,还包含了 plugin:react/recommended,这个插件配置了一些针对 React 的规则。parser 指定了使用 babel-eslint 作为解析器,env 中指定了代码运行的环境,这里我们指定了浏览器、CommonJS 和 ES6 环境。rules 则是我们配置的规则,这里我们关闭了一个 react/prop-types 的规则,这是因为我们的 React 项目中有使用 PropTypes 检查 props 类型的代码,但是这个规则默认是开启的,所以我们需要手动关闭。

解决常见的错误提示信息

'React' is defined but never used

这个错误提示信息表明我们使用了 React,但是却没有在代码中使用到。由于我们使用了 Babel,所以需要在代码中手动引入 React。使用以下方式从 React 中导出需要使用的组件或者函数:

这样我们就可以在代码中使用 React,同时也不会再出现这个错误提示信息了。

'setState' is a method, but invoking it looks like a function

Babel 允许我们使用最新的 ECMAScript 语法,包括箭头函数,但是在使用箭头函数时可能会出现 TypeError: Cannot read property 'setState' of undefined 错误。这是因为箭头函数中的 this 不是组件实例,而是指向了词法作用域的 this。我们可以使用 Class Properties 和箭头函数来绑定函数内部的 this,比如:

-- -------------------- ---- -------
----- ----------- ------- --------- -
  ----- - -
    ------ -
  --

  ----------- - -- -- -
    ---------------
      ------ ---------------- - -
    ---
  --

  -------- -
    ------ -
      -----
        ------- -------------------------------- ------------
        -------------------------
      ------
    --
  -
-
展开代码

这里我们使用了 Class Properties 来初始化 state,同时也使用了箭头函数来定义 handleClick,这样就可以在箭头函数中正确地使用 this.setState 了。

JSX not allowed in files with extension '.js'

如果你不想在文件名后添加 .jsx 扩展名,那么你需要在 Babel 配置文件中将 babel-plugin-transform-react-jsxpragma 选项改成 'h',如下所示:

-- -------------------- ---- -------
-
  ---------- -
    --------------------
    ---------------------
  --
  ---------- -
    -
      ------------------------------------
      -
        --------- ---
      -
    -
  -
-
展开代码

然后你需要在代码中使用 h() 而不是 <div><p> 这样的 JSX 语法。如果你使用了其他的模板库,比如 Preact,那么你需要将 pragma 修改成 'h'

结束语

本文介绍了如何使用 ESLint 对 Babel 编写的 React 代码进行检查,并且解决了常见的错误提示信息。虽然这些操作可能需要花费一些时间去完成,但是在团队协作中使用 ESLint 能够帮助代码风格保持一致,同时也能够提升代码质量。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67c2796e314edc2684bc4752

纠错
反馈

纠错反馈