Tree 树形控件
何时使用#
文件夹、组织架构、生物分类、国家地区等等,世间万物的大多数结构都是树形结构。使用树控件
可以完整展现其中的层级关系,并具有展开收起选择等交互功能。
文件夹、组织架构、生物分类、国家地区等等,世间万物的大多数结构都是树形结构。使用树控件
可以完整展现其中的层级关系,并具有展开收起选择等交互功能。
import { Tree } from 'antd';
const TreeNode = Tree.TreeNode;
ReactDOM.render(
<Tree defaultExpandAll={false}>
<TreeNode title="parent 1">
<TreeNode title="leaf" />
<TreeNode title="parent 1-1">
<TreeNode title="parent 2-1">
<TreeNode title="leaf" />
<TreeNode title="leaf" />
</TreeNode>
<TreeNode title="leaf" />
</TreeNode>
</TreeNode>
</Tree>
, document.getElementById('components-tree-demo-basic'));
import { Tree, Button } from 'antd';
const TreeNode = Tree.TreeNode;
class TreeDemo extends React.Component {
constructor(props) {
super(props);
['handleClick', 'handleCheck', 'handleSelect'].forEach((m)=> {
this[m] = this[m].bind(this);
});
this.state = {
checkedKeys: [],
selectedKeys: []
};
}
handleClick() {
this.setState({
checkedKeys: ['p11'],
selectedKeys: ['p21', 'p11']
});
}
handleCheck(info) {
console.log('check: ', info);
this.setState({
checkedKeys: ['p21'],
selectedKeys: ['p1', 'p21']
});
}
handleSelect(info) {
console.log('selected: ', info);
this.setState({
checkedKeys: ['p21'],
selectedKeys: ['p21']
});
}
render() {
return (<div>
<Tree defaultExpandAll checkable
onCheck={this.handleCheck} checkedKeys={this.state.checkedKeys}
onSelect={this.handleSelect} selectedKeys={this.state.selectedKeys} multiple>
<TreeNode title="parent 1" key="p1">
<TreeNode key="p10" title="leaf"/>
<TreeNode title="parent 1-1" key="p11">
<TreeNode title="parent 2-1" key="p21">
<TreeNode title="test" />
<TreeNode title={<span>sss</span>}/>
</TreeNode>
<TreeNode key="p22" title="leaf"/>
</TreeNode>
</TreeNode>
<TreeNode key="p12" title="leaf"/>
</Tree>
<Button type="primary" size="small" onClick={this.handleClick}>点此控制树节点</Button>
</div>);
}
}
ReactDOM.render(<TreeDemo />, document.getElementById('components-tree-demo-special'));
import { Tree } from 'antd';
const TreeNode = Tree.TreeNode;
function handleCheck(info) {
console.log('check: ', info);
}
ReactDOM.render(<div>
<Tree defaultExpandAll checkable onCheck={handleCheck}>
<TreeNode title="parent 1">
<TreeNode title="leaf" />
<TreeNode title="parent 1-1">
<TreeNode title="parent 2-1">
<TreeNode title="leaf" />
<TreeNode title="leaf" />
</TreeNode>
<TreeNode title="leaf" />
</TreeNode>
</TreeNode>
</Tree>
</div>
, document.getElementById('components-tree-demo-checkbox'));
import { Tree } from 'antd';
const TreeNode = Tree.TreeNode;
const asyncTree = [{
name: 'pNode 01',
key: '0-0'
}];
const generateTreeNodes = () => {
return [{
name: '伯约',
key: '0-0-0'
}];
};
const TreeDemo = React.createClass({
timeout(duration = 0) {
return new Promise((resolve, reject) => {
setTimeout(resolve.bind(this), duration);
});
},
getInitialState() {
return {
treeData: []
};
},
componentDidMount() {
this.timeout(1000).then(() => {
this.setState({
treeData: asyncTree
});
return asyncTree;
});
},
handleSelect(info) {
console.log('selected', info);
},
handleDataLoaded(treeNode) {
return this.timeout(1000).then(() => {
const child = generateTreeNodes();
const treeData = [...this.state.treeData];
treeData.forEach((item) => {
if (item.key === treeNode.props.eventKey) {
item.children = child;
}
});
this.setState({treeData});
return child;
});
},
render() {
const loop = (data) => {
return data.map((item) => {
if (item.children) {
return <TreeNode title={item.name} key={item.key}>{loop(item.children)}</TreeNode>;
} else {
return <TreeNode title={item.name} key={item.key} />;
}
});
};
const parseTreeNode = data => loop(data);
let treeNodes = parseTreeNode(this.state.treeData);
return (
<Tree onSelect={this.handleSelect} onDataLoaded={this.handleDataLoaded} showLine={false}>
{treeNodes}
</Tree>
);
}
});
ReactDOM.render(<TreeDemo />, document.getElementById('components-tree-demo-dynamic'));
参数 | 说明 | 类型 | 默认值 |
---|---|---|---|
multiple | 是否支持多选 | bool | false |
checkable | 是否支持选中 | bool | false |
defaultExpandAll | 设置展开所有树节点 | bool | false |
defaultExpandedKeys | 展开指定的树节点 | String[] | false |
defaultCheckedKeys | 默认选中复选框的树节点 | String[] | [] |
defaultSelectedKeys | 默认选中的树节点 | String[] | [] |
onCheck | 点击树节点或复选框触发 | function(e:{checked:bool,node,checkedKeys,event}) | - |
onSelect | 点击树节点触发 | function(e:{checked:bool,node,checkedKeys,event}) | - |
onDataLoaded | 异步加载数据 | function(node) | - |
参数 | 说明 | 类型 | 默认值 |
---|---|---|---|
disabled | 禁掉响应 | bool | false |
title | 标题 | String | '---' |
key | 被树的defaultCheckedKeys/defaultSelectedKeys/defaultExpandedKeys所用 | String | 内部计算出的节点位置 |