ReactJS多级下拉菜单

时间:2018-08-28 01:12:53

标签: javascript html css reactjs

我正在尝试构建一个多级ReactJs下拉菜单。我将以下帖子/代码用作基础:the following postthis jsfiddle code作为我的ReactJs组件的起点:

O(n)

CSS文件:

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;

最后是我的配置文件:

.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;
}

我的菜单混乱,其他选项之上,并且我肯定缺少简单的东西。

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

2 个答案:

答案 0 :(得分:2)

这个问题越来越老了,但是为了清楚起见,我添加了一个jsfiddle to your question。 为了使您的代码不费吹灰之力,我不得不在ReactJS中删除您的propTypes和使用的内部props,请参阅更多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;
}

但是,我看不到您凌乱的菜单,让我知道您是否仍然有问题。

答案 1 :(得分:0)

我迅速修改了Lagoni的代码,以便它也可以获取并显示子菜单的深度。

它从道具中获取并在每次递归时递增:

<DropdownMenu config={menuItem.submenu} depthLevel={depthLevel+1} submenu={true} />`

这样,您可以有效地使用它,例如,根据深度级别设置类。例如,每次深入时都使颜色渐变,或增加压痕。

jsfiddle