【问题标题】:must be wrapped in an enclosing tag必须包裹在封闭标签中
【发布时间】:2018-09-19 11:28:18
【问题描述】:

我无法在我的 react 应用程序中创建一个呈现菜单的简单组件。

这是我的组件的代码:

import React, { Component } from 'react';

export default class menu extends Component {

    render() {
        return (
            <nav className="navbar navbar-expand-lg navbar-light bg-light">
                <a className="navbar-brand" href="#">Navbar</a>
                <button className="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
                    <span className="navbar-toggler-icon"></span>
                </button>
                <div className="collapse navbar-collapse" id="navbarNavDropdown">
                    <ul className="navbar-nav">
                        <li className="nav-item active">
                            <a className="nav-link" href="#">Home <span className="sr-only">(current)</span></a>
                        </li>
                        <li className="nav-item">
                            <a className="nav-link" href="#">Features</a>
                        </li>
                        <li className="nav-item">
                            <a className="nav-link" href="#">Pricing</a>
                        </li>
                        <li className="nav-item dropdown">
                            <a className="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                                Dropdown link
                            </a>
                            <div className="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
                                <a className="dropdown-item" href="#">Action</a>
                                <a className="dropdown-item" href="#">Another action</a>
                                <a className="dropdown-item" href="#">Something else here</a>
                            </div>
                        </li>
                    </ul>
                </div>
            </nav>
        );
    }

}

我将它放在另一个组件中。

import menu from './componentes/menu';

构造函数(道具){ 超级(道具) this.state = { 系统:[] }; }

class App extends Component {

render() {
    return (
      <div>
        <menu></menu>
      </div>
      <div className="App">

        <div className="bs-header" id="content">
          <div className="container">
            <h1>Template Changelog</h1>
            <p>Lists all changes to the HTML template files</p>
          </div>
        </div>

); //[js] JSX expressions must have one parent element.
  }

}

我在注释行中也收到以下错误

[js] JSX 表达式必须有一个父元素。

【问题讨论】:

  • 仅供参考,您应该大写menu

标签: javascript reactjs


【解决方案1】:

您的App 拥有不止一个顶级div。将两者包装在另一个 div 中。

【讨论】:

  • @RafaelAugusto 它更像是一条 JSX 规则——基本上你不能从函数中返回多个对象。
【解决方案2】:

在 React 16 中,您可以使用 Fragment 包装您的组件,与使用额外的 div 标签包装它相比,这是一种更简洁的方法。

你所要做的就是从反应库中导入Fragment

import React, { Component, Fragment } from 'react';

你可以使用它

<Fragment>
  <ComponentA />
  <ComponentB />
</Fragment>

文档:https://reactjs.org/docs/fragments.html

否则,您可以使用 @Daniel A. White 提到的 div 标签来包装您的组件

【讨论】:

    猜你喜欢
    • 2019-12-17
    • 1970-01-01
    • 2018-04-01
    • 2019-06-14
    • 2019-11-06
    • 2017-12-30
    • 2019-01-12
    • 2020-06-14
    相关资源
    最近更新 更多