我遇到了无法编译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"
},
答案 0 :(得分:3)
如果使用箭头函数,则在返回值时有两个语法选项:
- ()=> {return somethinng}
- ()=>表达式
在第二种情况下,您只需编写自动返回的表达式。给您带来错误的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>)
)
答案 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