没有花括号的箭头函数

IT技术 javascript reactjs ecmascript-6 arrow-functions
2021-01-20 21:14:53

我是 ES6 和 React 的新手,我一直看到箭头函数。为什么有些箭头函数在粗箭头后使用花括号,有些使用括号?例如:

const foo = (params) => (
    <span>
        <p>Content</p>
    </span>
);

对比

const handleBar = (e) => {
    e.preventDefault();
    dispatch('logout');
};
6个回答

括号返回单个值,大括号执行多行代码。

您的示例看起来令人困惑,因为它使用的 JSX 看起来像多个“行”,但实际上只是被编译为一个“元素”。

下面是一些更多的例子,它们都做同样的事情:

const a = (who) => "hello " + who + "!";
const b = (who) => ("hello " + who + "!");
const c = (who) => (
  "hello " + who + "!"
);
const d = (who) => (
  "hello "
    + who
    + "!"
);
const e = (who) => {
  return "hello " + who + "!";
}; 

您还会经常看到围绕对象文字的括号,因为这是避免解析器将其视为代码块的一种方法:

const x = () => {} // Does nothing
const y = () => ({}) // returns an object
所以我只能用花括号而不是括号来使用“返回”?如果是,那是为什么?
2021-03-11 21:14:53
@vikramvi 因为括号意味着函数将返回其中单个语句的结果,即 const x = () => (x) 等于 const x = () => {return x} 。您始终可以使用花括号,但您可以使用括号代替从单个语句简洁地返回值。
2021-03-15 21:14:53
我得到了 GrayedFox 的想法,但是,为什么有人甚至实施了这个想法?对我来说似乎有点棘手,因为可能在特殊情况下您不确定它应该是 () 还是 {}
2021-03-18 21:14:53
太棒了,谢谢你。这也有助于我理解我遇到的其他一些错误。一旦我可以,我会接受它是正确的。谢谢大卫
2021-03-22 21:14:53
还可以使用花括号来防止箭头函数返回值——或者使单行箭头函数不应该返回任何内容。检查我的答案以获取示例(无法将其很好地格式化为评论)。
2021-03-26 21:14:53

还可以使用花括号来防止单线箭头函数返回值——或者让下一个开发人员清楚地看到,在这种情况下,单线箭头函数不应该返回任何值。

例如:

const myFunc = (stuff) => { someArray.push(stuff) }
const otherFunc = (stuff) => someArray.push(stuff)

console.log(myFunc())    // --> logs undefined
console.log(otherFunc()) // --> logs result of push which is new array length

实际上,在公文包中,当有人在箭头函数声明中使用大括号时,它等于以下内容:

const arrow = number => number + 1;

|||

const arrow = (number) => number + 1;

|||    

const arrow = (number) => ( number + 1 );

|||

const arrow = (number) => { return number + 1 };
所以我只能用花括号而不是括号来使用“返回”?如果是,那是为什么?
2021-03-10 21:14:53
谢谢你的信息,我明白了;但我的问题是;也可以在 ( ) 中使用 "return" 吗?
2021-03-16 21:14:53
@vikramvi,看,这只是一个简单的语法,当您的函数在执行上下文中没有任何内容时,只需使用更少的代码使其简单,=>没有花括号的意思return,简单易读,易于理解,包大小更小。看,那是纯粹的美。
2021-03-18 21:14:53
@vikramvi,显然不是。
2021-03-27 21:14:53

在箭头函数中使用括号来返回一个对象。

() => ({ name: 'YourName' })  // This will return an object

那相当于

() => {
   return { name : 'YourName' }
}

括号有一个隐式的 return 语句,而大括号则需要一个显式的 return 语句