首页 > 其他分享 >antd table 树形数据动态加载

antd table 树形数据动态加载

时间:2022-11-10 20:13:43浏览次数:40  
标签:const item onExpand return record 树形 antd table children

antd 的 table 组件支持树形结构的数据,不过前提是需要将整棵树的数据一次性全部返回,对于数据量比较大的情况下,可能会需要动态加载数据。

export default function DynamicTable() {
  const [loading, setLoading] = useState(false);
  const [list, setList] = useState([]);
  
  const getList = useCallback(
    async () => {
      setLoading(true);
      const res: any = await getTableData();
      setLoading(false);
        const tableData = res.data;
        // 默认都有children,方便table生成展开功能
        tableData?.map((item: any) => {
          item.children = [];
          return item;
        });
        setList(tableData);
    },
    []
  );

  useEffect(() => {
    getList();
  }, [getList]);

  const onExpand = async (expanded: boolean, record: any) => {
    //expanded是否展开  record每一项的值
    const id = record.id;
    const pList = list;
    if (!expanded) return;
    if (record.children?.length > 0) return;
    const data = { pid: [id] };
    const res: any = await getTableData(data);
    setLoading(false);
    let tableData = res.data || [];
    // 递归遍历查找当前项,并将children插入
    const dataMap = (items: any) => {
      items.find((item: any) => {
        if (item.id === id) {
          item.children = districts;
          return item;
        }
        if (item.children?.length > 0) {
          dataMap(item.children);
        }
      });
    };
    dataMap(pList);
    setList([...pList]);
  };
    
  return (
    <Table
      columns={columns}
      dataSource={list}
      size="middle"
      loading={loading}
      rowKey={(record: any) => record.id}
      pagination={false}
      expandIcon={({ expanded, onExpand, record }) => {
        //expanded-是否可展开, onExpand-展开事件默认, record-每一项的值 设置自定义图标
        if (record.level < 3) {
          //第一和第二层级才有图标(根据自己的额业务需求变动)
          if (expanded) {
            //根据是否可以展开判断
            return <MinusSquareOutlined onClick={(e) => onExpand(record, e)} />;
          } else {
            return <PlusSquareOutlined onClick={(e) => onExpand(record, e)} />;
          }
        } else {
          return null;
        }
      }}
      indentSize={30}
      onExpand={onExpand}
    />
  );
}

 

标签:const,item,onExpand,return,record,树形,antd,table,children
From: https://www.cnblogs.com/shellon/p/16769456.html

相关文章

  • iOS开发_UITableViewCell动画
    -(void)tableView:(UITableView*)tableViewwillDisplayCell:(UITableViewCell*)cellforRowAtIndexPath:(NSIndexPath*)indexPath{cell.transform=CGA......
  • vue el-tree树形结构选中子节点,保持父节点选中
    <!--菜单分配弹窗--><el-dialogtitle="菜单分配":visible.sync="menuDialogVisible"width="30%"><el-tree:props="props"......
  • k8s iptables 改造ipvs
    1.修改iptables为ipvs模式 ipvs采用的hash表,iptables采用一条条的规则列表。集群数量越多iptables规则就越多,而iptables规则是从上到下匹配,所以效率就越是低下......
  • 视频直播app源码,element表格table点击添加背景色
    视频直播app源码,element表格table点击添加背景色  cellclick(row,column){   this.row=row;   this.column=column;  },   tableCellStyl......
  • ElementNotInteractableException: Message: element not interactable
    ElementNotInteractableException:Message:elementnotinteractable 原因分析:1、未放鼠标在元素上,元素的标签:2、放了鼠标在元素上:元素的标签:3、从元素上移开鼠标,......
  • ant design vue table报错h is not defined
    报错原因使用table时由于columns数据太多,所以将columns中的数据拆分到一个单独的常量js文件中,又因为需要使用customRender,里面有<a-tag>之类的标签,需要使用jsx进行渲染,因......
  • QTableWidget 右键菜单
    头文件中:QMenu*m_pContextMenu;QAction*m_pActionDel;构造函数中:ui->tableWidget->setContextMenuPolicy(Qt::CustomContextMenu)voidCreateMenu(){......
  • iptables
    iptables-F//删除iptables现有规则iptables-L[-v[vv]-n]//查看iptables规则iptables-tnat-APOSTROUTING-s10.10.10.0/24-oeth1-jMASQUERADE......
  • 树形dp真的是太有意思啦!
    P3047[USACO12FEB]NearbyCowsG题意:给你一棵\(n\)个点的树,点带权,对于每个节点求出距离它不超过\(k\)的所有节点权值和\(m_i\)。\(1\len\le1e5,1\lek\le20,0......
  • elementUI 搜索条件、table、页脚封装
    一共分成了两个组件:组件一:搜索条件=>SearchParams.vue组件二:el-table和el-pagination=>TablePagintion考虑到业务的使用场景没用做过多的封装。(1)组件一:搜索条件代......