Dropdown 下拉菜单

如果项目中使用的是 1.x 版本的基础组件(@alifd/next),请在左侧导航顶部切换组件版本。

安装方法

  1. 在命令行中执行以下命令npm install @icedesign/base@latest -S

开发指南

何时使用

当页面上的操作命令过多时,用此组件可以收纳操作元素。点击或移入触点,会出现一个下拉菜单。可在列表中进行选择,并执行相应的命令。

API

下拉菜单

参数说明类型默认值
prefix样式类名的品牌前缀String'next-'
className自定义类名String-
style自定义内联样式Object-
children弹层内容ReactNode-
visible弹层当前是否可见Boolean-
defaultVisible弹层默认是否可见Booleanfalse
onVisibleChange弹层在显示和隐藏时触发的回调函数签名:Function(visible: Boolean, type: String, event: Object) => void参数:visible: {Boolean} 弹层是否显示type: {String} 触发弹层显示和隐藏的来源event: {Object} 事件对象Function() => {}
trigger触发弹层显示或者隐藏的元素ReactNode-
triggerType触发弹层显示或者隐藏的事件可选值:'hover', 'click', 'focus'Enum'hover'
disabled是否禁用,如果设置为true,那么trigger不能触发弹层的显示或隐藏Booleanfalse
align弹层相对于trigger的定位, 详见Overlay的定位部分String'tl bl'
offset弹层相对于trigger的定位的微调Array0, 0
delay悬浮状态下延时时间Number200
autoFocus弹层弹出后是否自动获取焦点Booleantrue
hasMask是否带有遮罩Booleanfalse
cache在弹层隐藏后是否保留当前的DOMBooleanfalse
beforeOpen弹层显示前触发的回调函数签名:Function() => voidFunction() => {}
afterOpen弹层显示后触发的回调函数签名:Function() => voidFunction() => {}
beforeClose弹层关闭前触发的回调函数签名:Function() => voidFunction() => {}
afterClose弹层关闭后触发的回调函数签名:Function() => voidFunction() => {}
onPosition弹层定位完成后触发的回调函数签名:Function(config: Object, node: Object) => void参数:config: {Object} 定位的参数node: {Object} 定位的元素Function() => {}
animation动画的配置,如果设置为false,将关闭动画Boolean/Object{ in: 'expandInDown', out: 'expandOutUp' }

代码示例

基本

最简单的用法。

Dropdown 下拉菜单 - 图1

查看源码在线预览

  1. import { Dropdown, Menu } from "@icedesign/base";
  2. const menu = (
  3. <Menu>
  4. <Menu.Item>Option 1</Menu.Item>
  5. <Menu.Item>Option 2</Menu.Item>
  6. <Menu.Item>Option 3</Menu.Item>
  7. <Menu.Item>Option 4</Menu.Item>
  8. </Menu>
  9. );
  10. ReactDOM.render(
  11. <Dropdown
  12. trigger={<a>Hello dropdown</a>}
  13. afterOpen={() => console.log("after open")}
  14. >
  15. {menu}
  16. </Dropdown>,
  17. mountNode
  18. );

从弹层外关闭

使用 visible 属性控制弹层显示或者隐藏,需要使用 safeNode 将其控制的元素告诉 dropdown 组件。

Dropdown 下拉菜单 - 图2

查看源码在线预览

  1. import { Dropdown, Menu, Button } from "@icedesign/base";
  2. const menu = (
  3. <Menu>
  4. <Menu.Item>Option 1</Menu.Item>
  5. <Menu.Item>Option 2</Menu.Item>
  6. <Menu.Item>Option 3</Menu.Item>
  7. <Menu.Item>Option 4</Menu.Item>
  8. </Menu>
  9. );
  10. class App extends React.Component {
  11. state = {
  12. visible: false
  13. };
  14. toggleVisible = () => {
  15. this.setState({
  16. visible: !this.state.visible
  17. });
  18. };
  19. onVisibleChange = visible => {
  20. this.setState({
  21. visible
  22. });
  23. };
  24. render() {
  25. return (
  26. <div>
  27. <div style={{ marginBottom: "20px" }}>
  28. <Button onClick={this.toggleVisible} ref="button">
  29. 切换弹层的显示隐藏
  30. </Button>
  31. </div>
  32. <Dropdown
  33. trigger={<span>Hello dropdown</span>}
  34. triggerType="click"
  35. visible={this.state.visible}
  36. onVisibleChange={this.onVisibleChange}
  37. safeNode={() => this.refs.button}
  38. >
  39. {menu}
  40. </Dropdown>
  41. </div>
  42. );
  43. }
  44. }
  45. ReactDOM.render(<App />, mountNode);

触发的事件类型

使用 triggerType 设置触发的事件类型。

Dropdown 下拉菜单 - 图3

查看源码在线预览

  1. import { Dropdown, Menu } from "@icedesign/base";
  2. const menu = (
  3. <Menu>
  4. <Menu.Item>Option 1</Menu.Item>
  5. <Menu.Item>Option 2</Menu.Item>
  6. <Menu.Item>Option 3</Menu.Item>
  7. <Menu.Item>Option 4</Menu.Item>
  8. </Menu>
  9. );
  10. ReactDOM.render(
  11. <Dropdown trigger={<a>Click me</a>} triggerType="click">
  12. {menu}
  13. </Dropdown>,
  14. mountNode
  15. );

相关区块

Dropdown 下拉菜单 - 图4

暂无相关区块