【问题标题】:Eslint Error - Unexpected block statement surrounding arrow body; move the returned value immediately after the =>Eslint 错误 - 箭头主体周围出现意外的块语句;在 => 之后立即移动返回的值
【发布时间】:2019-03-09 06:24:09
【问题描述】:

我收到错误无法编译Unexpected block statement surrounding arrow body; move the returned value immediately after the =>

文件:

{
    this.state.items.map((item) => {
       return (
         <div key={item}>
             <a href={item.mainContact.phoneHref + item.mainContact.phone}>
                <i className="fa fa-phone" />
                <strong>{item.mainContact.phone}</strong>
              </a>
          </div>
        );
    })
}

任何可以帮助我理解错误的人都会很棒。

谢谢

更新

我的 .eslintrc.json 文件:

{
  "env": {
    "browser": true,
    "jest": true
  },
  "extends": ["airbnb"],
  "parser": "babel-eslint",
  "rules": {
      "class-methods-use-this": 0,
      "react/jsx-filename-extension": [
          "error",
          {
            "extensions": [".js", ".jsx"]
          }
      ]
  }
}

这是我的 package.json 中的 devDependencies

"devDependencies": {
  "babel-eslint": "^9.0.0",
  "babel-loader": "^8.0.2",
  "eslint": "^5.6.1",
  "eslint-config-airbnb": "^17.1.0",
  "eslint-loader": "^2.1.1",
  "eslint-plugin-import": "^2.14.0",
  "eslint-plugin-jsx-a11y": "^6.1.1",
  "eslint-plugin-react": "^7.11.1",
  "json-loader": "^0.5.7",
  "react-html-parser": "^2.0.2",
  "react-transition-group": "^2.4.0",
  "webpack-cli": "^3.1.1"
},

【问题讨论】:

标签: reactjs eslint


【解决方案1】:

如果您使用箭头函数,则返回值时有两个语法选项:

  1. () => { 回报 }
  2. () => 表达式

在第二种情况下,您只需编写自动返回的表达式。给您错误的eslint rule 告诉您,如果您只有一个表达式,您可以删除花括号并直接返回表达式,如下所示:

{
    this.state.items.map((item) => (
         <div key={item}>
             <a href={item.mainContact.phoneHref + item.mainContact.phone}>
                <i className="fa fa-phone" />
                <strong>{item.mainContact.phone}</strong>
              </a>
          </div>
        )
    );
}

【讨论】:

    【解决方案2】:

    你正在使用 airbnb eslint 预设

    如果您只返回一个对象,则强制箭头函数不使用大括号。

    把你的代码改成这个,它应该可以编译

    this.state.items.map((item) => (<div key={item}>
         <a href={item.mainContact.phoneHref + item.mainContact.phone}>
            <i className="fa fa-phone" />
            <strong>{item.mainContact.phone}</strong>
          </a>
      </div>)
    )
    

    See docs for that rule

    See where is configured in the airbnb repo

    【讨论】:

      【解决方案3】:

      规则是说您可以删除花括号以及围绕您要返回的“返回”。但是,返回 if 语句需要花括号。

      这是基于 lint 错误的问题的正确解决方案:

      {
          this.state.items.map((item) => (
               <div key={item}>
                   <a href={item.mainContact.phoneHref + item.mainContact.phone}>
                      <i className="fa fa-phone" />
                      <strong>{item.mainContact.phone}</strong>
                    </a>
                </div>
              )
          );
      }
      

      但是,如果您要返回多个表达式,则需要大括号。这是一个使用 if 语句的示例:

      {
          this.state.items.map((item) => {
            if (!item.mainContact.phone) {
              return (
                <div key={item}>
                  <span>n/a</span>
                </div>
              )
            }
            return (
              <div key={item}>
                  <a href={item.mainContact.phoneHref + item.mainContact.phone}>
                     <i className="fa fa-phone" />
                     <strong>{item.mainContact.phone}</strong>
                   </a>
               </div>
            );
          })
      }
      

      【讨论】:

        【解决方案4】:

        只需删除您的 return() 函数并将整个块放入函数中 像这样

        {
            this.state.items.map((item) => (
                 <div key={item}>DATA</div>
            )
        }
        

        以下是其工作原理示例:

        () => { return <div key={item}>DATA</div>}
        

        所以删除我们的返回函数后,它会像这样工作

        () => (<div key={item}>DATA</div>)
        

        () => yourState
        

        【讨论】:

          【解决方案5】:

          添加以下代码:

          "arrow-body-style": "off"
          

          【讨论】:

            猜你喜欢
            • 2021-10-19
            • 1970-01-01
            • 1970-01-01
            • 2020-10-15
            • 1970-01-01
            • 2018-04-10
            • 1970-01-01
            • 1970-01-01
            • 2019-09-29
            相关资源
            最近更新 更多