Menu导航菜单

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

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

    水平的顶部导航菜单。

    Menu导航菜单 - 图2

    内嵌菜单

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

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

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

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

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

    1. import { Menu, Icon } from 'antd';
    2. const { SubMenu } = Menu;
    3. class Sider extends React.Component {
    4. // submenu keys of first level
    5. state = {
    6. openKeys: ['sub1'],
    7. };
    8. onOpenChange = openKeys => {
    9. const latestOpenKey = openKeys.find(key => this.state.openKeys.indexOf(key) === -1);
    10. if (this.rootSubmenuKeys.indexOf(latestOpenKey) === -1) {
    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;
    3. class Sider extends React.Component {
    4. state = {
    5. theme: 'dark',
    6. current: '1',
    7. };
    8. changeTheme = value => {
    9. this.setState({
    10. });
    11. };
    12. handleClick = e => {
    13. console.log('click ', e);
    14. this.setState({
    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>
    6. </menu>

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