美文网首页饥人谷技术博客
React中render的return为什么加()

React中render的return为什么加()

作者: upup_dayday | 来源:发表于2019-01-04 06:24 被阅读3次

先上代码,就用官网的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>
  }
}

[图片上传中...(image.png-4ea5e-1546554053910-0)]

另外还要注意的一点是,对于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

相关文章

网友评论

    本文标题:React中render的return为什么加()

    本文链接:https://www.haomeiwen.com/subject/dyicrqtx.html