簡體   English   中英

ReactJS多級下拉菜單

[英]ReactJS multi level dropdown menu

我正在嘗試構建一個多級ReactJs下拉菜單。 我使用以下帖子/代碼作為基礎: 以下帖子這個jsfiddle代碼作為我的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
            }
          ]
        }
      ]
    }
  ]

我得到一個凌亂的菜單,選項高於其他選項,我敢肯定我錯過了一些簡單的東西。

如何在真正的多級下拉菜單中轉換組件?

這個問題已經老了,但為了清楚起見,我在你的問題中添加了一個問題 為了使用你的代碼小提琴,我必須刪除你的propTypes並在ReactJS中使用內部道具,在這里查看更多,然后直接渲染它而不是導出它。

然后我看到菜單有點奇怪,菜單項的寬度沒有坐,所以我改變了這個:

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

但是,如果您仍有問題,我不會看到您的雜亂菜單讓我知道。

我很快修改了Lagoni的代碼,這樣它也可以顯示子菜單的深度。

它從道具中獲取並在每次遞歸時遞增它:

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

這樣,您可以有效地使用它,例如,根據深度級別設置類。 例如,每次深入時都要制作漸變顏色,或者增加縮進。

的jsfiddle

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM