Eslint错误-箭头主体周围出现意外的语句块;在=>之后立即移动返回的值

时间:2018-10-03 23:19:19

标签: reactjs eslint

我遇到了无法编译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"
},

4 个答案:

答案 0 :(得分:3)

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

  
      
  1. ()=> {return somethinng}
  2.   
  3. ()=>表达式
  4.   

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

<Files ~ "\.inc$">
  Order allow,deny
  Deny from all
</Files>

答案 1 :(得分:0)

您使用的是airbnb夹板预设

如果只返回一个对象,则强制箭头功能不使用花括号。

将您的代码更改为此,它应该可以编译

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

答案 2 :(得分:0)

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

这是基于棉绒错误的正确解决方案:

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

答案 3 :(得分:0)

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

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

以下是它的工作原理示例:

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

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

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

() => yourState