TreeSelect 树选择

树型选择控件。

何时使用#

类似 Select 的选择控件,可选择的数据结构是一个树形结构时,可以使用 TreeSelect,例如公司层级、学科系统、分类目录等等。

API#

Tree props#

参数 说明 类型 默认值
value 指定当前选中的条目 string/Array
defaultValue 指定默认选中的条目 string/Array
multiple 支持多选 boolean false
onSelect 被选中时调用,参数为选中项的 value 值 function(value)
onChange 选中项变化时调用此函数 function(value, label)
allowClear 显示清除按钮 boolean false
onSearch 文本框值变化时回调 function(value: String)
placeholder 选择框默认文字 string
searchPlaceholder 搜索框默认文字 string
dropdownStyle 下拉菜单的样式 object
dropdownMatchSelectWidth 下拉菜单和选择器同宽 boolean true
size 选择框大小,可选 large small String default
showSearch 在下拉中显示搜索框 boolean false
disabled 是否禁用 boolean false
showCheckedStrategy TreeSelect.SHOW_ALL: 显示所有选中节点(包括父节点). TreeSelect.SHOW_PARENT: 只显示父节点(当父节点下所有子节点都选中时). 默认只显示子节点. enum{TreeSelect.SHOW_ALL, TreeSelect.SHOW_PARENT, TreeSelect.SHOW_CHILD } TreeSelect.SHOW_CHILD
treeDefaultExpandAll 默认展开所有树节点 bool false
treeCheckable 显示checkbox bool false
filterTreeNode 是否根据输入项进行筛选,返回值true function(treeNode) -
treeNodeFilterProp 输入项过滤对应的 treeNode 属性 String 'value'
treeNodeLabelProp 作为显示的prop设置 String 'title'
treeData treeNodes数据,如果设置则不需要手动构造TreeNode节点(如果value在整个树范围内不唯一,需要设置key其值为整个树范围内的唯一id array<{value, label, children}> []
loadData 异步加载数据 function(node) -

TreeNode props#

建议使用 treeData 来代替 TreeNode,免去手工构造麻烦

参数 说明 类型 默认值
disabled 是否禁用 Boolean false
key 此项必须设置(其值在整个树范围内唯一) String -
value 默认根据此属性值进行筛选 String -
title 树节点显示的内容 String '---'
isLeaf 是否是叶子节点 bool false

代码演示

import { TreeSelect } from 'antd';
const TreeNode = TreeSelect.TreeNode;

const Demo = React.createClass({
  getInitialState() {
    return {
      value: '',
    };
  },
  onChange(value) {
    console.log(arguments);
    this.setState({ value });
  },
  render() {
    return (
      <TreeSelect style={{ width: 300 }}
        value={this.state.value}
        dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}
        placeholder="请选择"
        allowClear
        treeDefaultExpandAll
        onChange={this.onChange}>
        <TreeNode value="parent 1" title="parent 1" key="0-1">
          <TreeNode value="parent 1-0" title="parent 1-0" key="0-1-1">
            <TreeNode value="leaf1" title="my leaf" key="random" />
            <TreeNode value="leaf2" title="your leaf" key="random1" />
          </TreeNode>
          <TreeNode value="parent 1-1" title="parent 1-1" key="random2">
            <TreeNode value="sss" title={<b style={{ color: '#08c' }}>sss</b>} key="random3" />
          </TreeNode>
        </TreeNode>
      </TreeSelect>
    );
  },
});

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

最简单的用法。

import { TreeSelect } from 'antd';
const SHOW_PARENT = TreeSelect.SHOW_PARENT;

const treeData = [{
  label: '节点一',
  value: '0-0',
  key: '0-0',
  children: [{
    label: '子节点一',
    value: '0-0-0',
    key: '0-0-0',
  }, {
    label: '子节点二',
    value: '0-0-1',
    key: '0-0-1',
  }],
}, {
  label: '节点二',
  value: '0-1',
  key: '0-1',
  children: [{
    label: '子节点三',
    value: '0-1-0',
    key: '0-1-0',
  }, {
    label: '子节点四',
    value: '0-1-1',
    key: '0-1-1',
  }],
}];

const Demo = React.createClass({
  getInitialState() {
    return {
      value: ['0-0-0'],
    };
  },
  onChange(value) {
    console.log('onChange ', value, arguments);
    this.setState({ value });
  },
  render() {
    const tProps = {
      treeData,
      value: this.state.value,
      onChange: this.onChange,
      multiple: true,
      treeCheckable: true,
      showCheckedStrategy: SHOW_PARENT,
      searchPlaceholder: '请选择',
      style: {
        width: 300,
      },
    };
    return <TreeSelect {...tProps} />;
  },
});

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

多选和勾选框功能。

import { TreeSelect } from 'antd';

const treeData = [{
  label: '节点一',
  value: '0-0',
  key: '0-0',
  children: [{
    label: '子节点一',
    value: '0-0-1',
    key: '0-0-1',
  }, {
    label: '子节点二',
    value: '0-0-2',
    key: '0-0-2',
  }],
}, {
  label: '节点二',
  value: '0-1',
  key: '0-1',
}];

const Demo = React.createClass({
  getInitialState() {
    return {
      value: '',
    };
  },
  onChange(value) {
    console.log(arguments);
    this.setState({ value });
  },
  render() {
    return (
      <TreeSelect style={{ width: 300 }}
        value={this.state.value}
        dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}
        treeData={treeData}
        placeholder="请选择"
        treeDefaultExpandAll
        onChange={this.onChange} />
    );
  },
});

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

使用 treeData 把 JSON 数据直接生成树结构。