Menu导航菜单

    导航菜单是一个网站的灵魂,用户依赖导航在各个页面中进行跳转。一般分为顶部导航和侧边导航,顶部导航提供全局性的类目和功能,侧边导航提供多级结构来收纳和排列网站架构。

    更多布局和导航的使用可以参考:通用布局

    水平的顶部导航菜单。

    Menu 导航菜单 - 图2

    内嵌菜单

    垂直菜单,子菜单内嵌在菜单区域。

    1. const SubMenu = Menu.SubMenu;
    2. const MenuItemGroup = Menu.ItemGroup;
    3. class Sider extends React.Component {
    4. handleClick = e => {
    5. console.log('click ', e);
    6. };
    7. render() {
    8. return (
    9. <Menu
    10. onClick={this.handleClick}
    11. style={{ width: 256 }}
    12. defaultSelectedKeys={['1']}
    13. defaultOpenKeys={['sub1']}
    14. mode="inline"
    15. >
    16. <SubMenu
    17. key="sub1"
    18. title={
    19. <span>
    20. <Icon type="mail" />
    21. <span>Navigation One</span>
    22. </span>
    23. }
    24. >
    25. <MenuItemGroup key="g1" title="Item 1">
    26. <Menu.Item key="1">Option 1</Menu.Item>
    27. <Menu.Item key="2">Option 2</Menu.Item>
    28. </MenuItemGroup>
    29. <MenuItemGroup key="g2" title="Item 2">
    30. <Menu.Item key="3">Option 3</Menu.Item>
    31. <Menu.Item key="4">Option 4</Menu.Item>
    32. </MenuItemGroup>
    33. </SubMenu>
    34. <SubMenu
    35. key="sub2"
    36. title={
    37. <span>
    38. <Icon type="appstore" />
    39. <span>Navigation Two</span>
    40. </span>
    41. }
    42. >
    43. <Menu.Item key="5">Option 5</Menu.Item>
    44. <Menu.Item key="6">Option 6</Menu.Item>
    45. <SubMenu key="sub3" title="Submenu">
    46. <Menu.Item key="7">Option 7</Menu.Item>
    47. <Menu.Item key="8">Option 8</Menu.Item>
    48. </SubMenu>
    49. </SubMenu>
    50. <SubMenu
    51. key="sub4"
    52. title={
    53. <span>
    54. <Icon type="setting" />
    55. <span>Navigation Three</span>
    56. </span>
    57. }
    58. >
    59. <Menu.Item key="9">Option 9</Menu.Item>
    60. <Menu.Item key="10">Option 10</Menu.Item>
    61. <Menu.Item key="11">Option 11</Menu.Item>
    62. <Menu.Item key="12">Option 12</Menu.Item>
    63. </SubMenu>
    64. </Menu>
    65. );
    66. }
    67. }
    68. ReactDOM.render(<Sider />, mountNode);

    内嵌菜单可以被缩起/展开。

    你可以在 Layout 里查看侧边布局结合的完整示例。

    点击菜单,收起其他展开的所有菜单,保持菜单聚焦简洁。

    1. import { Menu, Icon } from 'antd';
    2. const SubMenu = Menu.SubMenu;
    3. class Sider extends React.Component {
    4. rootSubmenuKeys = ['sub1', 'sub2', 'sub4'];
    5. state = {
    6. openKeys: ['sub1'],
    7. };
    8. onOpenChange = openKeys => {
    9. const latestOpenKey = openKeys.find(key => this.state.openKeys.indexOf(key) === -1);
    10. this.setState({ openKeys });
    11. } else {
    12. this.setState({
    13. openKeys: latestOpenKey ? [latestOpenKey] : [],
    14. });
    15. }
    16. };
    17. render() {
    18. return (
    19. <Menu
    20. mode="inline"
    21. openKeys={this.state.openKeys}
    22. onOpenChange={this.onOpenChange}
    23. style={{ width: 256 }}
    24. >
    25. <SubMenu
    26. key="sub1"
    27. title={
    28. <span>
    29. <Icon type="mail" />
    30. <span>Navigation One</span>
    31. </span>
    32. }
    33. >
    34. <Menu.Item key="1">Option 1</Menu.Item>
    35. <Menu.Item key="2">Option 2</Menu.Item>
    36. <Menu.Item key="3">Option 3</Menu.Item>
    37. <Menu.Item key="4">Option 4</Menu.Item>
    38. </SubMenu>
    39. <SubMenu
    40. key="sub2"
    41. title={
    42. <span>
    43. <Icon type="appstore" />
    44. <span>Navigation Two</span>
    45. </span>
    46. }
    47. >
    48. <Menu.Item key="5">Option 5</Menu.Item>
    49. <Menu.Item key="6">Option 6</Menu.Item>
    50. <SubMenu key="sub3" title="Submenu">
    51. <Menu.Item key="7">Option 7</Menu.Item>
    52. <Menu.Item key="8">Option 8</Menu.Item>
    53. </SubMenu>
    54. </SubMenu>
    55. <SubMenu
    56. key="sub4"
    57. title={
    58. <span>
    59. <Icon type="setting" />
    60. <span>Navigation Three</span>
    61. </span>
    62. }
    63. >
    64. <Menu.Item key="9">Option 9</Menu.Item>
    65. <Menu.Item key="10">Option 10</Menu.Item>
    66. <Menu.Item key="11">Option 11</Menu.Item>
    67. <Menu.Item key="12">Option 12</Menu.Item>
    68. </SubMenu>
    69. </Menu>
    70. );
    71. }
    72. }
    73. ReactDOM.render(<Sider />, mountNode);

    Menu 导航菜单 - 图5

    垂直菜单

    内建了两套主题 light|dark,默认 light

    1. import { Menu, Icon, Switch } from 'antd';
    2. const SubMenu = Menu.SubMenu;
    3. class Sider extends React.Component {
    4. state = {
    5. theme: 'dark',
    6. current: '1',
    7. };
    8. changeTheme = value => {
    9. theme: value ? 'dark' : 'light',
    10. });
    11. };
    12. handleClick = e => {
    13. console.log('click ', e);
    14. current: e.key,
    15. });
    16. };
    17. render() {
    18. return (
    19. <div>
    20. <Switch
    21. checked={this.state.theme === 'dark'}
    22. onChange={this.changeTheme}
    23. checkedChildren="Dark"
    24. unCheckedChildren="Light"
    25. />
    26. <br />
    27. <br />
    28. <Menu
    29. theme={this.state.theme}
    30. onClick={this.handleClick}
    31. style={{ width: 256 }}
    32. defaultOpenKeys={['sub1']}
    33. selectedKeys={[this.state.current]}
    34. mode="inline"
    35. >
    36. <SubMenu
    37. key="sub1"
    38. title={
    39. <span>
    40. <Icon type="mail" />
    41. <span>Navigation One</span>
    42. </span>
    43. }
    44. >
    45. <Menu.Item key="1">Option 1</Menu.Item>
    46. <Menu.Item key="2">Option 2</Menu.Item>
    47. <Menu.Item key="3">Option 3</Menu.Item>
    48. <Menu.Item key="4">Option 4</Menu.Item>
    49. </SubMenu>
    50. <SubMenu
    51. key="sub2"
    52. title={
    53. <span>
    54. <Icon type="appstore" />
    55. <span>Navigtion Two</span>
    56. </span>
    57. }
    58. >
    59. <Menu.Item key="5">Option 5</Menu.Item>
    60. <Menu.Item key="6">Option 6</Menu.Item>
    61. <SubMenu key="sub3" title="Submenu">
    62. <Menu.Item key="7">Option 7</Menu.Item>
    63. <Menu.Item key="8">Option 8</Menu.Item>
    64. </SubMenu>
    65. </SubMenu>
    66. <SubMenu
    67. key="sub4"
    68. title={
    69. <span>
    70. <Icon type="setting" />
    71. <span>Navigation Three</span>
    72. </span>
    73. }
    74. >
    75. <Menu.Item key="9">Option 9</Menu.Item>
    76. <Menu.Item key="10">Option 10</Menu.Item>
    77. <Menu.Item key="11">Option 11</Menu.Item>
    78. <Menu.Item key="12">Option 12</Menu.Item>
    79. </SubMenu>
    80. </Menu>
    81. </div>
    82. );
    83. }
    84. }
    85. ReactDOM.render(<Sider />, mountNode);

    Menu 导航菜单 - 图7

    切换菜单类型

    展示动态切换模式。

    1. <menu>
    2. <Menu.Item>菜单项</Menu.Item>
    3. <SubMenu title="子菜单">
    4. <Menu.Item>子菜单项</Menu.Item>
    5. </SubMenu>

    菜单项分割线,只用在弹出菜单内。