1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
| import React, { useState, useEffect } from 'react'; import { Table } from 'antd';
const Test = () => { const [expandedRowKeys, setExpandedRowKeys] = useState([]); const [dataSource, setDataSource] = useState([]); const columns = [ { title: '名称', key: 'name', dataIndex: 'name', }, { title: '描述', key: 'desc', dataIndex: 'desc', }, ]; const onExpandTable = (expanded, record) => { let arr = expandedRowKeys; if (expanded) { arr.push(record.id); } else { arr.splice( arr.findIndex((i) => i === record.id), 1 ); } setExpandedRowKeys(arr); };
const getTreeData = (treeData, parentId) => { let tree = []; let currentParentId = parentId || null; for (let i = 0; i < treeData.length; i += 1) { if (treeData[i]) { if (treeData[i].parentId === currentParentId) { tree.push(treeData[i]); } } } for (let j = 0; j < tree.length; j += 1) { if (tree[j]) { let children = getTreeData(treeData, tree[j].id); if (children && children.length) { tree[j].children = children; } } } return tree; };
useEffect(() => { const res = [ { parentId: null, id: '0e02f058-65fc-4e47-82d5-3aaf95f816cd', name: '中国', desc: '中国陆地面积约9600000平方千米', }, { parentId: '0e02f058-65fc-4e47-82d5-3aaf95f816cd', id: '03014a12-3948-4f8a-b182-ed8b6d58a7ea', name: '四川', desc: '四川地域面积约486000平方公里', }, { parentId: '0e02f058-65fc-4e47-82d5-3aaf95f816cd', id: '201f9c09-f2e8-4bea-917e-b5fdc56d9e24', name: '山东', desc: '陆域面积约155800平方公里', }, { parentId: '03014a12-3948-4f8a-b182-ed8b6d58a7ea', id: '305d7648-9e3e-4b25-a246-3be08344434e', name: '成都', desc: '成都地域面积约14335平方公里', }, { parentId: '201f9c09-f2e8-4bea-917e-b5fdc56d9e24', id: '3898961f-7487-46d6-8595-f2dfac59b116', name: '济南', desc: '济南地域面积约10244.45平方公里', }, ]; let data = getTreeData(res); console.log('data: ', data); setDataSource(data); }, []); return ( <> <Table columns={columns} dataSource={dataSource} rowKey={(record) => record.id} expandedRowKeys={expandedRowKeys} onExpand={onExpandTable} pagination={false} /> </> ); };
export default Test;
|