代码之家  ›  专栏  ›  技术社区  ›  Mendes

ReactJS多级下拉菜单

  •  1
  • Mendes  · 技术社区  · 7 年前

    我正在尝试构建一个多级别的ReactJS下拉菜单。我使用以下文章/代码作为基础: the following post this jsfiddle code 作为我的ReactJS组件的起点:

    class DropdownMenu extends Component {
      static propTypes = {
        config: PropTypes.array.isRequired
      };
    
      getMenuItemTitle = (menuItem, index, depthLevel) => {
        return menuItem.title;
      };
    
      getMenuItem = (menuItem, depthLevel, index) => {
        let title = this.getMenuItemTitle(menuItem, index, depthLevel);
    
        if (menuItem.submenu && menuItem.submenu.length > 0) {
          return (
            <li>
              {title}
              <DropdownMenu config={menuItem.submenu} submenu={true} />
            </li>
          );
        } else {
          return <li>{title}</li>;
        }
      };
    
      render = () => {
        let { config } = this.props;
    
        let options = [];
        config.map((item, index) => {
          options.push(this.getMenuItem(item, 0, index));
        });
    
        if (this.props.submenu && this.props.submenu === true)
          return <ul>{options}</ul>;
    
        return <ul className="dropdown-menu">{options}</ul>;
      };
    }
    
    export default DropdownMenu;
    

    CSS文件:

    .dropdown-menu {
        height: 35px;
        list-style: none;
        margin: 0;
        padding: 0;
        float: left;
        text-align: center;
    }
    
    .dropdown-menu li {
        display: inline-block;
        position: relative;
        float: left;
    }
    
    .dropdown-menu li a {
        display: inline-block;
        width: 200px;
        line-height: 35px;
        text-decoration: none;
    }
    
    .dropdown-menu li li a {
        font-size: 12px;
    }
    
    .dropdown-menu li:hover {
        background: blue;
    }
    
    /*--- Sublist Styles ---*/
    .dropdown-menu ul {
        position: absolute;
        display: none;
    }
    
    /*--- Hide Sub Sublists ---*/
    .dropdown-menu li:hover ul ul {
        display: none;
    }
    
    /*--- Sublevel UL's display and position on hover ---*/
    .dropdown-menu li:hover ul {
        display: block;
    }
    .dropdown-menu li li:hover ul {
        margin-left: 200px;
        margin-top: -35px;
        display: block;
    }
    nu-li {
        padding: 10px;
    }
    
    .dropdown-submenu {
        position: absolute;
        left: 0px;
        top: 0px;
    }
    

    最后是我的配置文件:

      "navItems": [
        {
          "title": "Option 1",
          "submenu": null
        },
        {
          "title": "Option 2",
          "submenu": [
            {
              "title": "Option 2.1",
              "submenu": [
                {
                  "title": "Option 2.1.1",
                  "submenu": null
                },
                {
                  "title": "Option 2.1.2",
                  "submenu": null
                }
              ]
            },
            {
              "title": "Option 2.2",
              "submenu": [
                {
                  "title": "Option 2.2.1",
                  "submenu": null
                },
                {
                  "title": "Option 2.2.2",
                  "submenu": null
                }
              ]
            }
          ]
        }
      ]
    

    我得到了一份凌乱的菜单,上面有其他选项,我确信我遗漏了一些简单的东西。

    如何在真正的多级别下拉菜单中打开组件?

    1 回复  |  直到 6 年前
        1
  •  2
  •   jonaslagoni    6 年前

    jsfiddle to your question here

    .dropdown-menu li {
        display: inline-block;
        position: relative;
        float: left;
    }
    
    .dropdown-menu li a {
        display: inline-block;
        width: 200px;
        line-height: 35px;
        text-decoration: none;
    }
    

    .dropdown-menu li {
        display: inline-block;
        position: relative;
        float: left;
        width: 200px;
        line-height: 35px;
        text-decoration: none;
    }