2

在学习过程中,发现一个小问题,因为小很少人关注讨论过这个问题, react构建component的render方法中return后面为什么要加括号?
下面尝试给出些解释。
首先('<p></p>'),(1,2)这些都是原生支持的写法,括号中多个合法的表达式都会执行,返回最后一个表达式的值。如下demo示例所示

function a() {
console.log('a')
}
function b(){
console.log('b')
}
var ans = (a(),b(),'c')
console.log(ans)
//输出 a b c

但是()在return后的作用又不一样了,起到分隔的作用

function a(){
return 1
2
}
a() //输出1
上面的等价于下面的写法,按照行自动添加分号,分号表示一句执行表达式结束。并且只会执行表达式1
function a(){
return 1;
2;
}

function c(){
return( 
1,
2)
}
c() //输出 2
与上面的表达式不同的是,表达式1和2都会执行,这就是括号的作用。

而react的render方法return括号中不是可执行表达式,而是一些html标签,执行会报错

function test () {
    return (
                <div>
                    <p>test</p>
                </div>
            )
}
上面写法等价于下面的写法
function test () {
 return <div>
         <p>test</p>
  </div>
       }
最终经过babel-jsx转义才能被浏览器执行,转义结果如下。
function test() {
  return React.createElement(
    "p",
    null,
    React.createElement(
      "span",
      null,
      "test"
    )
  );
}

所以可以得出结论,render方法中return结果添加括号的目的,是为了更符号原生编码习惯的的思维,并且在一些IDE,例如webstrome中编写时html标签自动对齐方式更好看。


jsdt
4.9k 声望3.9k 粉丝

make a little progress every day


下一篇 »
异步和promise