箭头函数和括号 () 或 {} 或 ({}) 的使用

IT技术 javascript reactjs ecmascript-6
2021-02-26 11:26:13

我不明白为什么在箭头函数中我们不需要将箭头函数({})的文字包裹在大括号中,而不是在这个例子中将文字包裹在单个()大括号中。为什么?我曾在互联网上寻找答案,但失败了。

还有为什么我们把参数放在双括号中({}),而不是仅仅放在()

const FilterLink = ({ filter, children }) => (
   <NavLink
       to={filter === 'SHOW_ALL' ? '/' : `/${ filter }`}
       activeStyle={ {
       textDecoration: 'none',
           color: 'black'
       }}
   >
       {children}
   </NavLink>
)
2个回答

使用({})is 到destructure参数并且=> ()是隐式返回等效于=> { return ()}并且(仅用于消除对象的开头和函数体的左大括号之间的歧义,并且通常在具有多行返回值时使用。您可以简单地避免使用(NavLink与箭头在同一行=>

const FilterLink = ({ filter, children }) => ( // <-- implicit return 
  <NavLink
    to={filter === 'SHOW_ALL' ? '/' : `/${ filter }`}
    activeStyle={ {
      textDecoration: 'none',
      color: 'black'
    }}
  >
    {children}
  </NavLink>
)

相当于

const FilterLink = ({ filter, children }) => {
   return (
      <NavLink
        to={filter === 'SHOW_ALL' ? '/' : `/${ filter }`}
        activeStyle={ {
          textDecoration: 'none',
          color: 'black'
        }}
      >
        {children}
      </NavLink>
    )
}

检查此答案以获取有关解构中使用的更多详细信息({ filter, children })

@MaxWolfen,两者都是一回事,您可以随时编写const FilterLink = ({ filter, children }) => ( <NavLinkconst FilterLink = ({ filter, children }) => <NavLink
2021-04-16 11:26:13
@Shubham 而不是谈论“线条”,也许你应该编辑你的答案来谈论“表达”。
2021-04-22 11:26:13
@ShubhamKhatri 所以,在我的情况下=> ()怎么办?您在回答中给出了两个不同的观点:1. 是一个隐式返回等价于=> { return ()} 2.(仅用于消除对象的开头和函数体的左大括号之间的歧义。
2021-04-29 11:26:13
@GuyT 戴上我的学究帽,这也不完全正确,因为我们谈论的是单个表达式,而不是一行 :^)
2021-05-09 11:26:13
@TomFenech 这也不完全正确。当它是单行时,只有一个隐式返回。当使用大括号(多行)时,可以设置显式返回。因此,换句话说,它不是因为=>符号而隐式返回,而是因为它是单行。
2021-05-13 11:26:13

const add = ( a, b ) => ( a + b )

相当于

const add = ( a, b ) => { return a+b; }

当您使用()after 时,=>它只会自动返回里面的值。

编辑:您也可以()完全省略,感谢Tom Fenesh

不,在这种情况下(之后=>不会做任何事情。
2021-04-21 11:26:13
@TomFenech 确实,它与=> a + b. 他应该放在a + b下一行来让对方明白这一点
2021-04-23 11:26:13