Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我可以省略React中带括号的return语句_Javascript_Reactjs - Fatal编程技术网

Javascript 为什么我可以省略React中带括号的return语句

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

对一个潜在的愚蠢问题的反应相当新鲜

我怎么可能用括号省略Reacts返回语句呢

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' }
    }