Antd tree树结构 数据多情况下 加载慢的 解决办法

28 篇文章 0 订阅
15 篇文章 0 订阅

通过antd tree 树结构数据异步加载

  • 主要是通过后端处理好数据,前端通过没打开一层数据则请求下一层数据,

代码:

import React,{ useState,useEffect } from 'react';
import { Tree } from 'antd';

// 将 后台返回的 数据转换成 tree 所需要的数据
// 这里不需要递归(注释的就是) 因为每次异步加载 点击的时候调用这个函数就可以了
const dealTreeData = (data) => {
    return data.map((it) => {
      return {
        key: it.id,
        id: it.id,
        title: it.name,
       // isLeaf: it.type === '2' ? true : false, // 判断 前面 icon
      };
    });
  };

const updateTreeData = (list, key, children) => {
  return list.map((node) => {
    if (node.key === key) {
      return { ...node, children };
    }
    if (node.children) {
      return { ...node, children: updateTreeData(node.children, key, children) };
    }
    return node;
  });
}

export const TreeNode = () => {
  const [treeData, setTreeData] = useState();
  useEffect(() => {
    // 页面加载请求的数据
    setTreeData(dealTreeData('请求的数据')) // 作为初始数据 页面一开始加载的数据
  }, []);
    
    
  //  异步加载数据
  const onLoadData = ({id,key}) =>
    new Promise((resolve) => {
    const data = '调用接口请求下一层数据'
        // 判断点击的时候有没有 如果连 childrenList 都没有 就直接返回 
     // if (!(arry.childrenList.length)) {
     //  resolve();
     //  return;
     // }
      setTimeout(() => {
        setTreeData((origin) =>
          updateTreeData(origin, key, dealTreeData(data)),
        );
        resolve();
      }, 300);
    });

  return <Tree loadData={onLoadData} treeData={treeData} />;
};
Ant Design (antd) 是一套基于 React 的 UI 组件库,其中的 Tree 是用于展示层级数据的组件。在处理树形结构的增删改操作时,你可以按照以下步骤进行: 1. **创建 Tree 组件**: 首先,在你的 Ant Design 应用中引入 `Tree` 和相关的 API,例如 `TreeNode`。 ```jsx import { Tree, TreeNode } from 'antd'; ``` 2. **数据模型**: 定义你的节点数据模型,包含节点的 key、label(标签)、children(子节点数组)等属性。 ```jsx const data = [ { title: '父节点', key: '0-0', children: [ { title: '子节点1', key: '0-0-1' }, { title: '子节点2', key: '0-0-2' } ] } ]; ``` 3. **添加节点**: 可以通过修改数据模型来添加新节点,然后触发树组件的 `onAdd` 或者 `onChange` 事件来同步更新视图。 ```jsx let newNode = { title: '新增节点', key: uuidv4(), // 使用随机 UUID 作为节点唯一标识 }; data.push(newNode); // 添加到当前层级 if (treeProps.onChange) { treeProps.onChange(newNode, 'add'); } ``` 4. **删除节点**: 删除节点时,同样需要从数据源中移除,并通过 `onDelete` 或者 `onChange` 事件通知组件。 ```jsx function deleteNode(nodeKey) { const index = data.findIndex(n => n.key === nodeKey); if (index !== -1) { data.splice(index, 1); if (treeProps.onChange) { treeProps.onChange(null, 'delete', nodeKey); } } } ``` 5. **编辑节点**: 如果需要支持编辑节点内容,通常会在点击节点时弹出输入框让用户修改,然后修改数据模型并触发相应的事件。 6. **注意事项**: - 在实际应用中,你需要将这些操作封装成函数,并可能需要考虑状态管理(如 Redux、MobX 等)来统一处理数据变化。 - 调整 Tree 的展开/收起状态可能需要用到 `onSelect` 和 `onExpand` 事件。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小朋友120

谢谢你拉近我与星星的距离

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值