解析错误:相邻的JSX元素必须包装在一个封闭标签中

时间:2019-05-12 10:07:43

标签: javascript node.js reactjs jsx

在为我的React应用构建反应路线时,错误会显示

  

分析错误:相邻的JSX元素必须包装在一个封闭的标记中。

下面是我的代码

class App extends Component {
  render () {
    return (
      //Make App Running within Browser Router//
      <BrowserRouter> 
        <div className="navbar">
          <Navbar />
          <Route exact path='/' component={Home} />
          <Route path='/chat' component={Chat} />
          <Route path='/about' component={About} />
        </div>
      </BrowserRouter>

      <div className="main-container"> **==> This is when problem show**
        <Searchapp />
      </div>
    );
  }
}

export default App;

谢谢

2 个答案:

答案 0 :(得分:1)

您必须使用父节点封装JSX。您可以使用div元素,或者如果您不想在DOM中添加额外的元素,则可以使用React Fragment <>

class App extends Component {
  render () {
    return (
      <>
      <BrowserRouter> 
        <div className="navbar">
          <Navbar />
          <Route exact path='/' component={Home} />
          <Route path='/chat' component={Chat} />
          <Route path='/about' component={About} />
        </div>
      </BrowserRouter>

      <div className="main-container"> **==> This is when problem show**
        <Searchapp />
      </div>
      </>
    );
  }
}

export default App;

答案 1 :(得分:0)

我们不允许将多个JSX元素分配给一个变量,这是无效的JavaScript语法。

您尝试将某些同级元素彼此相邻放置,但必须有一个外部标记,但是如果添加一个额外的<div>标记会导致样式丢失呢?

因此,先前提供的答案称为React.Fragment,它是一个JSX外观元素,可让您将多个元素分配给单个变量,但是在渲染到屏幕时,它将不会对DOM产生任何可见元素

它看起来像这样:

const ObjectDelete = () => {
  const actions = (
    <React.Fragment>
      <button className="ui button negative">Delete</button>
      <button className="ui button">Cancel</button>
    </React.Fragment>
  );

基本上是长形,可以像这样缩短:

const ObjectDelete = () => {
  const actions = (
    <>
      <button className="ui button negative">Delete</button>
      <button className="ui button">Cancel</button>
    </>
  );

或者自从您介绍了课程组件后,它对您是否更有帮助:

class ObjectDelete extends React.Component {
  renderActions() {
    return (
      <React.Fragment>
        <button className="ui button negative">Delete</button>
        <button className="ui button">Cancel</button>
      </React.Fragment>
    );
  }

请注意,此时带有<React.Fragment>的JSX已包含在一个辅助函数中。