React中render的return为什么加()

先上代码,就用官网的app.js说明吧

class App extends Component {
  render() {
    return (
      <div className="App">
        <header className="App-header">
          <img src={logo} className="App-logo" alt="logo" />
          <p>
            Edit <code>src/App.js</code> and save to reload.
          </p>
          <a
            className="App-link"
            href="https://reactjs.org"
            target="_blank"
            rel="noopener noreferrer"
          >
            Learn React
          </a>
        </header>
      </div>
    );
  }
}
image.png

我们发现,render进行return时,对于单行的内容,没有加括号,但对于多行的内容要加括号,这点在官网组件一章里也可发现。

原因在于,JSX转为js后,js会在每行自动加';',如果return后换行了,那么就会变成return;
所以针对文章开头举的app的例子,如果不加括号的话,是需要右内容和return在同一行的,就像下面这样

class App extends Component {
  render() {
    return       <div className="App">
        <header className="App-header">
          <img src={logo} className="App-logo" alt="logo" />
          <p>
            Edit <code>src/App.js</code> and save to reload.
          </p>
          <a
            className="App-link"
            href="https://reactjs.org"
            target="_blank"
            rel="noopener noreferrer"
          >
            Learn React
          </a>
        </header>
      </div>
  }
}

这样写也是可以编译通过的,但如果不加括号,还在return后换行了,那就会报错

class App extends Component {
  render() {
    return       
        <div className="App">
         <header className="App-header">
          <img src={logo} className="App-logo" alt="logo" />
          <p>
            Edit <code>src/App.js</code> and save to reload.
          </p>
          <a
            className="App-link"
            href="https://reactjs.org"
            target="_blank"
            rel="noopener noreferrer"
          >
            Learn React
          </a>
        </header>
      </div>
  }
}

另外还要注意的一点是,对于return的内容,只能有一个根节点,所以返回的内容必须有一个tag进行包裹,否则,不管加不加括号都是不行的,编译报错的描述也很直观了

class App extends Component {
  render() {
    return (
      <div className="App">
        <header className="App-header">
          <img src={logo} className="App-logo" alt="logo" />
          <p>
            Edit <code>src/App.js</code> and save to reload.
          </p>
          <a
            className="App-link"
            href="https://reactjs.org"
            target="_blank"
            rel="noopener noreferrer"
          >
            Learn React
          </a>
        </header>
      </div>
      <p>
        Edit <code>src/App.js</code> and save to reload.
      </p>
    );
  }
}
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容