Menu 菜单

在一个临时的面板上显示一组操作。

规则

  • 至少包含 2 个以上的菜单项。

  • 不应该被当做主要导航方式。

代码演示

一级菜单

  1. import { Menu } from 'antd-mobile';
  2. const data = [
  3. {
  4. label: '中餐',
  5. value: '21',
  6. }, {
  7. label: '未生效',
  8. value: '22',
  9. disabled: true,
  10. }, {
  11. label: '火锅',
  12. value: '23',
  13. }, {
  14. label: '自助餐',
  15. value: '24',
  16. }, {
  17. label: '快餐',
  18. value: '25',
  19. },
  20. ];
  21. const MenuExample = React.createClass({
  22. onChange(value) {
  23. let label = '';
  24. data.forEach((el) => {
  25. if (el.value === value[0]) {
  26. label = el.label;
  27. }
  28. });
  29. console.log(`选中了 ${label}`);
  30. },
  31. render() {
  32. return <Menu data={data} level={1} onChange={this.onChange} height={Math.round(document.documentElement.clientHeight / 3)} />;
  33. },
  34. });
  35. ReactDOM.render(<MenuExample />, mountNode);

二级菜单

  1. import { Menu } from 'antd-mobile';
  2. const data = [
  3. {
  4. value: '1',
  5. label: '全部分类',
  6. isLeaf: true,
  7. }, {
  8. value: '2',
  9. label: '美食',
  10. children: [
  11. {
  12. label: '全部美食',
  13. value: '22',
  14. disabled: true,
  15. },
  16. {
  17. label: '中餐',
  18. value: '21',
  19. }, {
  20. label: '火锅',
  21. value: '23',
  22. }, {
  23. label: '自助餐',
  24. value: '24',
  25. }, {
  26. label: '快餐',
  27. value: '25',
  28. }, {
  29. label: '小吃',
  30. value: '26',
  31. }, {
  32. label: '面包甜点',
  33. value: '27',
  34. }, {
  35. label: '生鲜水果',
  36. value: '28',
  37. }, {
  38. label: '面食',
  39. value: '29',
  40. }, {
  41. label: '休闲食品',
  42. value: '210',
  43. }],
  44. }, {
  45. value: '3',
  46. label: '超市',
  47. children: [
  48. {
  49. label: '全部超市',
  50. value: '31',
  51. }, {
  52. label: '超市',
  53. value: '32',
  54. disabled: true,
  55. }, {
  56. label: '便利店',
  57. value: '33',
  58. }, {
  59. label: '个人护理',
  60. value: '34',
  61. }],
  62. },
  63. ];
  64. const MenuExample = React.createClass({
  65. getInitialState() {
  66. return {
  67. initData: '',
  68. };
  69. },
  70. componentDidMount() {
  71. setTimeout(() => {
  72. this.setState({
  73. initData: data,
  74. });
  75. }, 1000);
  76. },
  77. onChange(value) {
  78. let label = '';
  79. data.forEach(dataItem => {
  80. if (dataItem.value === value[0]) {
  81. label = dataItem.label;
  82. if (dataItem.children && value[1]) {
  83. dataItem.children.forEach(cItem => {
  84. if (cItem.value === value[1]) {
  85. label += ` ${cItem.label}`;
  86. }
  87. });
  88. }
  89. }
  90. });
  91. console.log(label);
  92. },
  93. render() {
  94. return this.state.initData ? <Menu data={data} value={['2', '22']} onChange={this.onChange} />
  95. : <div>loading...</div>;
  96. },
  97. });
  98. ReactDOM.render(<MenuExample />, mountNode);

Menu菜单 - 图1

API ( 适用平台:WEB )

成员说明类型默认值
data数据(isLeaf 设置后 children 无效)Array<{label, value, disabled?, children<data>?, isLeaf?}>[]
level菜单级数,可选1/2number2
value初始值,一级和二级筛选数据的value组成的数组Array[]
onChange选择后的回调函数(item: Object): void
height筛选组件的高度numberdocument.documentElement.clientHeight / 2