📜  ReactJS UI Ant Design TreeSelect 组件(1)

📅  最后修改于: 2023-12-03 14:47:00.997000             🧑  作者: Mango

ReactJS UI Ant Design TreeSelect 组件

ReactJS UI Ant Design TreeSelect 组件是一款基于 ReactJS 框架的UI组件,它提供了一个可交互的树形下拉菜单,可满足在多层级结构中进行选择的需求。

特性
  • 支持在层级结构中进行选择
  • 支持异步加载数据
  • 支持搜索
  • 支持自定义图标和显示内容
安装
npm install antd --save
使用
import { TreeSelect } from 'antd';

const treeData = [
  {
    title: 'Node1',
    value: '0-0',
    children: [
      {
        title: 'Child Node1',
        value: '0-0-1',
      },
      {
        title: 'Child Node2',
        value: '0-0-2',
      },
    ],
  },
  {
    title: 'Node2',
    value: '0-1',
  },
];

function onChange(value) {
  console.log(value);
}

function Demo() {
  return (
    <TreeSelect
      showSearch
      style={{ width: '100%' }}
      value={value}
      dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}
      treeData={treeData}
      placeholder="Please select"
      allowClear
      treeDefaultExpandAll
      onChange={onChange}
    />
  );
}

ReactDOM.render(
  <Demo />,
  mountNode,
);
API
<TreeSelect>
  <TreeNode />
</TreeSelect>

TreeSelect

| 属性名 | 说明 | 类型 | 默认值 | |---------------------|------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------|--------------| | allowClear | 支持清除, 单选模式有效 | boolean | false | | autoClearSearchValue| 在非 multiple 模式下,是否自动清空搜索框内容 | boolean | true | | autoFocus | 默认获取焦点 | boolean | false | | dropdownClassName | 下拉菜单的 className 属性 | string | - | | dropdownMatchSelectWidth | 下拉菜单和选择器同宽 | boolean | true | | dropdownPopupAlign | 下拉菜单的对齐方式, 不支持宽度自适应 | Object | {} | | dropdownStyle | 下拉菜单的 style 属性 | Object | - | | filterTreeNode | 是否根据输入项进行筛选,默认用 treeNodeFilterProp 的值作为要筛选的 TreeNode 的属性值 | boolean or Function(filter: String, treeNode: TreeNode) => boolean | false | | getPopupContainer | 指定下拉菜单的容器 | Function(triggerNode) => HTMLElement | () => document.body | | loadData | 异步加载数据 | Function(node: TreeNode) | - | | maxTagCount | 最多显示多少个 tag,响应式 | number | - | | maxTagPlaceholder | 隐藏 tag 时显示的内容 | ReactNode | - | | multiple | 支持多选, 与 TreeCheckable 互斥 | boolean | false | | placeholder | 选择框默认文字 | string | - | | searchPlaceholder | 搜索框默认文字 | string | - | | searchRender | 自定义搜索函数,输入参数为 treeNode(当前搜索到的节点),ti (输入框内容), 返回值为 bool | Function(treeNode, ti) => bool | - | | showCheckedStrategy | 定义选中项回填的方式。TreeSelect.SHOW_ALL: 显示所有选中节点(包括父节点). TreeSelect.SHOW_PARENT: 显示父节点(当父节点下所有子节点都选中时). TreeSelect.SHOW_CHILD: 只显示子节点(默认) | enum{'SHOW_ALL', 'SHOW_PARENT', 'SHOW_CHILD'} | SHOW_CHILD | | showSearch | 在下拉中显示搜索框 | boolean | false | | size | 输入框大小 | string | default | | suffixIcon | 自定义的选择框后缀图标 | ReactNode | - | | tagRender | 自定义 tag 展示内容 | Function({ label, value, closable }) => ReactNode | - | | treeData | treeNodes 数据,如果设置则节点为受控模式 | Array<{ title, value, children, [disabled], [key], [switcherIcon], [icon], [isLeaf] }> | [] | | treeDataSimpleMode | 是否简单模式,会自动转换 label 为 title value 为 key | boolean or Object({ id: 'id', pId: 'pId', rootPId: null }) | false | | treenodeLabelProp | 作为显示的 prop 名称 | string | title | | treeExpandedKeys | 默认展开的树节点 | string[] | - | | treeIcon | 是否展示 TreeNode title 前的图标,没有默认样式,如设置为 true,需要自行定义图标相关样式 | boolean | false | | treeNodeFilterProp | 输入项过滤对应的 treeNode 属性 | string | 'value' | | treeNodeLabelProp | 作为显示的 prop 名称 | string | 'title' | | value | 指定当前选中的条目 | string or string[] | - | | onChange | 选中或取消选中触发的回调函数 | function(value, label, extra) | - | | onPopupScroll | 下拉列表滚动时触发 | function({ event, tree }) | - | | onSelect | 被选中时调用,参数为选中项的 value (或 key) 值或节点 | function(value, node, extra) | - | | onTreeExpand | 展开节点时调用,参数为展开的节点及是否展开(如果节点全部收起,为收起的节点) | function(expandedKeys, {expanded: bool, node}) | - |

TreeNode

| 属性名 | 说明 | 类型 | 默认值 | |-------------|------------------------|---------------------------|--------| | disabled | 是否禁用 | boolean | false | | icon | 自定义图标 | ReactNode or (props) => ReactNode | - | | isLeaf | 是否叶子节点 | boolean | - | | key | TreeSelect 会把此属性作为 value 使用,如果没有设置则使用 title 做为 value| string | title | | selectable | 是否可选 | boolean | true | | title | 标题 | string/ReactNode | '---' | | value | 默认根据此属性值进行筛选,具体见 filterTreeNode 的实现 | string | '' |

注意事项
  • TreeSelect 内部会根据 treeExpandedKeys 属性,默认展开所有子节点。因此 ensureLoaded 应该写在 onSelect 回调函数中,否则无法通过 setState 来更新数据源,无法展开本节点的子节点。
  • 传入的 value 值的属性类型必须与它们的数据源资格匹配。 当使用函数 loadData 时,我们只支持异步加载选中项目的最后一个节点的 value 属性,这意味着你必须确保在 loading 中的异步加载操作仅返回最后一级数据。Otherwise TreeSelect 组件无法自动滚动到选择项目或将该项目视为选择.