Javascript 为什么我可以省略React中带括号的return语句
对一个潜在的愚蠢问题的反应相当新鲜 我怎么可能用括号省略Reacts返回语句呢Javascript 为什么我可以省略React中带括号的return语句,javascript,reactjs,Javascript,Reactjs,对一个潜在的愚蠢问题的反应相当新鲜 我怎么可能用括号省略Reacts返回语句呢 const Nav = () => ( <nav className="c_navbar"> { some jsx magic here } </nav> ) const Nav=()=>( {这里有一些jsx魔术} ) 当我看到其他类似的例子时: const Nav = () => { return ( <nav className="c_n
const Nav = () => (
<nav className="c_navbar">
{ some jsx magic here }
</nav>
)
const Nav=()=>(
{这里有一些jsx魔术}
)
当我看到其他类似的例子时:
const Nav = () => {
return (
<nav className="c_navbar">
{ some jsx magic here }
</nav>
)
}
const Nav=()=>{
返回(
{这里有一些jsx魔术}
)
}
据我所知,()
在返回对象文字时会提供帮助,这样它就不会与代码块混淆。但我不认为这适用于这里
感谢在JavaScript中(params)=>x
语法相当于[1]函数(params){return x;},因此返回值就在那里,它只是隐式的
如果在=>
函数中有一个用大括号括起来的函数体(例如多语句体),那么就不再有隐式返回
e、 g
[1] -使用=>
的函数类似于function()
-函数,但它们也有隐式的绑定,无法重新绑定,这使得它们适合于网页脚本中的事件处理程序。这不是一种特殊的react语法,而是一种JavaScript语法。
箭头函数声明有两种类型的主体类型
简明体值隐式返回
块体-需要显式返回
有关更多信息,请参阅。第一个代码段是隐式返回。括号仅为方便开发者而提供;在不使用它们的情况下,可以毫不含糊地解析代码,但以牺牲可读性为代价:
const Nav = () =>
<nav className="c_navbar">
{ some jsx magic here }
</nav>
被解析为
return;
<nav className="c_navbar">
{ some jsx magic here }
</nav>
返回;
{这里有一些jsx魔术}
为了在没有括号的情况下正确解析,它应该是:
return <nav className="c_navbar">
{ some jsx magic here }
</nav>
返回
{这里有一些jsx魔术}
因此,括号通常用于隐式和显式返回的一致性,并允许通过适当的缩进来提高可读性。这是一个JavaScript问题,而不是React问题
1) 圆括号()在arrow函数中用于返回对象
() => ({ name: 'Amanda' }) // Shorthand to return an object
这相当于
() => { // Block body
return { name : 'Amanda' }
}
括号还用于对JavaScript返回语句上的多行代码进行分组,以防止分号自动插入错误的位置
class StarsComponent{
构造函数(大小){
这个。大小=大小;
}
render(){
报税表(
*
)//这不是严格意义上的反应。阅读问题并不是完全重复的。链接问题及其答案地址都不是此处重要的return(…)
部分。如果没有换行符,您也可以轻松返回不带括号的jsx组件。您对“多语句体”的评论这在技术上是不正确的。它与多语句无关,它与函数体是否包含在显式定义的块中(带有{}
)或是否为函数体提供了表达式有关。例如var fn=(x,y)=>(x=x*y,x*2)
,fn(4,5)
将隐式返回40
,即使它使用@mhodges执行两个完全独立的语句,我已经删除了C注释以避免混淆读者(在C中,=>
语法用于Lambda表达式和表达式体方法和属性,而不是“LINQ语句”)。通过“多语句”我指的是大括号包装的函数体,它实际上只能包含一条语句,但大多数情况下它们都包含多条语句。我不知道JavaScript的大括号包装函数体的具体术语。@mhodges,所以如果我在同一行上写多条语句,我仍然可以省略返回值?@mhodges刚刚看到了。我我不会写,但这篇文章是关于理解的。非常感谢!回答得很好。当我需要{}
时,因为我会在返回之前做一些事情,我绝对不能忽略返回,它必须是明确的,但我仍然可以忽略返回的()
。对吗?是的,你可以忽略()
但只要返回值在同一行,return…
。您还应该注意,隐式返回不仅适用于对象。它可以返回任何单个值,如React组件。OP问题中的括号仅因jsx中的换行而需要。
() => ({ name: 'Amanda' }) // Shorthand to return an object
() => { // Block body
return { name : 'Amanda' }
}