Ant Design中Tree使用defaultExpandAll属性后不会默认展开所有节点怎么办?

ops/2024/10/22 10:43:24/

最近做前端项目时,使用到了 tree 组件,选择使用 Ant Design 中的 tree 组件,默认所有节点初始时全部展开,使用 defaultExpandAll 属性。但是显示的时候,一个节点都没展开。于是调研了一下这个问题。发现有以下问题:

1、TreeData 数据 未初始化完成,还未开始渲染,就已经开始展开。

一般treeData 数据获取都是从接口获取,是异步操作,会有段初始化时间,这时treeData未初始化完成,就开始展开,会出现问题。解决办法:

如果还会存在问题,没有正常展开,就是下面的问题了。

2、defaultExpandAll 属性无法生效,与其他属性 冲突,没错,就和这个 expandedKeys 属性冲突。

解决方案:判断 treeData 是否初始化完成,使用 defaultExpandedKeys 代替 expandedKeys 属性。

javascript"><div>// 修改1{treeData.length > 0 &&  <TreecheckableonExpand={onExpand}// expandedKeys={expandedKeys}// 修改2defaultExpandedKeys={expandedKeys}autoExpandParent={autoExpandParent}onCheck={onCheck}checkedKeys={checkedKeys}onSelect={onSelect}selectedKeys={selectedKeys}treeData={treeData}defaultExpandAll={true}/>}
</div>
完整代码

这个代码里面加了点业务,就是说根据两个 互斥button 按钮,点击按钮的时候,会根据不同的 typeVal 返回 不同的树结构 ,如果都放在一个 treeData 中,第二次点击的时候,就会出现 数据为初始化,展开不生效 的问题,没想出特别好的办法,于是设置了 treeDataOnetreeDataTwo ,分别展示。这里大家如果有比较好的解决办法,希望可以评论一下,学习一下。

import { Tree } from 'antd';
import type { DataNode } from 'antd/es/tree';
import React, { useState, useEffect } from 'react';const treeData: DataNode[] = [{title: '0-0',key: '0-0',children: [{title: '0-0-0',key: '0-0-0',children: [{ title: '0-0-0-0', key: '0-0-0-0' },{ title: '0-0-0-1', key: '0-0-0-1' },{ title: '0-0-0-2', key: '0-0-0-2' },],},{title: '0-0-1',key: '0-0-1',children: [{ title: '0-0-1-0', key: '0-0-1-0' },{ title: '0-0-1-1', key: '0-0-1-1' },{ title: '0-0-1-2', key: '0-0-1-2' },],},{title: '0-0-2',key: '0-0-2',},],},{title: '0-1',key: '0-1',children: [{ title: '0-1-0-0', key: '0-1-0-0' },{ title: '0-1-0-1', key: '0-1-0-1' },{ title: '0-1-0-2', key: '0-1-0-2' },],},{title: '0-2',key: '0-2',},
];const ButtonMenu = [{ key: 0, value: 'one' }, { key: 1, value: 'two' }];const App: React.FC = () => {const [expandedKeys, setExpandedKeys] = useState<React.Key[]>([]);const [checkedKeys, setCheckedKeys] = useState<React.Key[]>([]);const [selectedKeys, setSelectedKeys] = useState<React.Key[]>([]);const [autoExpandParent, setAutoExpandParent] = useState<boolean>(true);const [treeDataTwo, setTreeDataOne] = useState<DataNode[]>([]);const [treeDataTwo, setTreeDataTwo] = useState<DataNode[]>([]);const [typeVal, setTypeVal] = useState<number>();const onExpand = (expandedKeysValue: React.Key[]) => {setExpandedKeys(expandedKeysValue);setAutoExpandParent(false);};const onCheck = (checkedKeysValue: React.Key[]) => {setCheckedKeys(checkedKeysValue);};const onSelect = (selectedKeysValue: React.Key[], info: any) => {setSelectedKeys(selectedKeysValue);};const handleChangeType = (type: number) => {setTypeVal(type);}// 本例上treeData是本地写死的,但是项目中一般会使用接口获取。useEffect(() => {getTreeData({ type : typeVal }).then(res) => {// 这里加一点业务,根据type的类型不同,获取不同的treeDataif(typeVal === 0) setTreeDataOne(res.data[typeVal]);else if (typeVal === 1) setTreeDataTwo(res.data[typeVal]);}})return (<div><div>{ButtonMenu.map((account: number) => (<button key={account.key} onClick={() => handleChangeType(account.key)}>{account.value}</button>))}		</div><div>// 修改1{typeVal === 0 && treeDataOne.length > 0 &&  <TreecheckableonExpand={onExpand}// expandedKeys={expandedKeys}// 修改2defaultExpandedKeys={expandedKeys}autoExpandParent={autoExpandParent}onCheck={onCheck}checkedKeys={checkedKeys}onSelect={onSelect}selectedKeys={selectedKeys}treeData={treeDataOne}defaultExpandAll={true}/>}{typeVal === 1 && treeDataTwo.length > 0 &&  <TreecheckableonExpand={onExpand}// expandedKeys={expandedKeys}// 修改2defaultExpandedKeys={expandedKeys}autoExpandParent={autoExpandParent}onCheck={onCheck}checkedKeys={checkedKeys}onSelect={onSelect}selectedKeys={selectedKeys}treeData={treeDataTwo}defaultExpandAll={true}/>}</div></div>);
};export default App;

http://www.ppmy.cn/ops/7445.html

相关文章

深入解析Tomcat的工作流程

tomcat解析 Tomcat是一个广泛使用的开源Servlet容器&#xff0c;用于托管Java Web应用程序。理解Tomcat的工作流程对于开发人员和系统管理员来说是非常重要的。本文将深入探讨Tomcat的工作原理&#xff0c;包括请求处理、线程池管理、类加载、以及与Web服务器之间的通信。 ###…

安全访问服务边缘(SASE):网络新时代的安全与连接解决方案

随着信息技术的飞速发展&#xff0c;在企业纷纷拥抱数字业务的过程中&#xff0c;由于边缘计算、云服务、混合网络的逐渐兴起&#xff0c;使得本就漏洞百出的传统网络安全架构更加岌岌可危&#xff0c;企业和组织面临着日益复杂且多变的网络安全挑战。传统的网络安全解决方案往…

Flutter - iOS 开发者速成篇

首先 安装FLutter开发环境&#xff1a;M1 Flutter SDK的安装和环境配置 然后了解Flutter和Dart 开源电子书&#xff1a;Flutter实战 将第一章初略看一下&#xff0c;你就大概了解一下Flutter和Dart这门语言 开始学习Dart语言 作为有iOS经验的兄弟们&#xff0c;学习Dart最快…

每日一题(4.17)

目录 Leecode-16-最接近的三数之和题目示例解题思路代码实现 Leecode-面试题01.07-旋转矩阵题目示例解题思路代码实现 Leecode-16-最接近的三数之和 题目 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数&#xff0c;使它们的和与 targe…

软件设计:UML 模型图总结

1. 相关链接 参考教程&#xff1a; https://sparxsystems.com/resources/tutorials/ https://sparxsystems.com/enterprise_architect_user_guide/15.2/model_domains/whatisuml.html Unified Modeling Language (UML) description, UML diagram examples, tutorials and r…

知识图谱的起源与发展

文章目录 知识图谱的发展历史知识图谱的重要性知识图谱与Ontology、语义网络之间的区别知识图谱的定义 知识图谱的发展历史 知识图谱始于20世纪50年代&#xff0c;至今大致分为三个发展阶段&#xff1a;第一阶段 &#xff08;1955年—1977年&#xff09;是知识图谱的起源阶段&a…

Swift-20-基础数据类型

数据定义 语法规则 先来看下下面的代码 import Cocoavar num1 "four" //a var num2: String "four" //b var num3 4 //c var num4: Int 4 //d上面的几行代码都能正常运行&#xff0c;其中a和b行等价&#xff0c;c和d行等价。区另就在于是否声…

大唐杯题目

5G NR 系统中&#xff0c;UE 收到 RRCSetup后&#xff0c;可能会有以下哪些过程 A.进入 RRC CONNECTED&#xff0c;停止小区重选: B.如果 NAS 层提供了多个S-NSSAI&#xff0c;则写入 s-nssai-List; C.发送 RRCSetupComplete. D.UE 启动 T300&#xff0c;将 RRCSetupReguest 消…