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

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

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

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

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

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

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

<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.mzph.cn/bicheng/1418.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode刷题(python)——(六)

01.03.07 练习题目&#xff08;第 06 天&#xff09; 1. 0506. 相对名次 1.1 题目大意 描述&#xff1a;给定一个长度为 n n n 的数组 s c o r e score score。其中 s c o r e [ i ] score[i] score[i] 表示第 i i i 名运动员在比赛中的成绩。所有成绩互不相同。 要求&…

在 Vue中,v-for 指令的使用

在 Vue中&#xff0c;v-for 指令用于渲染一个列表&#xff0c;基于源数据多次渲染元素或模板块。它对于展示数组或对象中的数据特别有用。 数组渲染 假设你有一个数组&#xff0c;并且你想为每个数组元素渲染一个 <li> 标签&#xff1a; <template> <ul>…

Spring Cloud 运维篇1——Jenkins CI/CD 持续集成部署

Jenkins 1、Jenkins是什么&#xff1f; Jenkins 是一款开源 CI/CD 软件&#xff0c;用于自动化各种任务&#xff0c;包括构建、测试和部署软件。 Jenkins 支持各种运行方式&#xff0c;可通过系统包、Docker 或者一个独立的 Java 程序。 Jenkins Docker Compose持续集成流…

k8s安装,linux-ubuntu上面kubernetes详细安装过程

官方文档&#xff1a;https://kubernetes.io/zh-cn/docs/setup/production-environment/container-runtimes/ 环境配置 该部分每个主机都要执行 如果你确定不需要某个特定设置&#xff0c;则可以跳过它。 设置root登录 sudo passwd root sudo vim /etc/ssh/sshd_config Perm…

HarmonyOS NEXT 使用XComponent + Vsync 实现自定义动画

介绍 XComponent 提供了应用在 native 侧调用 OpenGLES 图形接口的能力&#xff0c;本文主要介绍如何配合 Vsync 事件&#xff0c;完成自定义动画。在这种实现方式下&#xff0c;自定义动画的绘制不在 UI 主线程中完成&#xff0c;即使主线程卡顿&#xff0c;动画效果也不会受…

晶圆制造之MPW(多项目晶圆)简介

01、MPW是什么&#xff1f; 在半导体行业中&#xff0c;MPW 是 "Multi Project Wafer" 的缩写&#xff0c;中文意思是多项目晶圆。MPW 的主要思想是将使用相同工艺的多个集成电路设计放在同一晶圆片上进行流片&#xff08;即制造&#xff09;。这种方法允许多个设计共…

java学习笔记6

11. 类的封装 ​ 在Java中,**封装(Encapsulation)**是面向对象编程中的重要概念,它指的是将类的数据(属性)和行为(方法)绑定在一起,并对外部隐藏数据的具体实现细节,只通过公共方法来访问和操作数据。这有助于提高代码的安全性、可维护性和灵活性。 11.1 为什要封装 …

Python exe 文件反编译为 Python 脚本

文章目录 前言版本反编译Python 可执行文件&#xff08;.exe&#xff09;反编译打包一个简单的 .exe 可执行文件提取 pyc 文件使用脚本提取使用工具提取 将 .pyc 文件转换为 Python 脚本入口运行类非入口运行类转换补全后的 pyc 文件uncompyle6 反编译在线工具 可能遇到的问题P…

Golang context 原理分析

1. 说在前面2. 场景分析 2.1 链式传递2.2 主动取消2.3 任务超时2.4 数据存储 3. 源码解读 3.1 一个核心数据结构 3.1.1 Context 3.2 四种具体实现 3.2.1 emptyCtx3.2.2 cancelCtx3.2.3 timerCtx3.2.4 valueCtx 3.3 六个核心方法 3.3.1 Background() && TODO()3.3.2 Wit…

如何在在wordpress安装百度统计

前言 看过我的往期文章的都知道&#xff0c;我又建了一个网站&#xff0c;这次是来真的了。于是&#xff0c;最近在查阅资料时发现&#xff0c;有一款免费的软件可以帮我吗分析网站数据。&#xff08;虽然我的破烂网站压根没人访问&#xff0c;但是能装上的都得上&#xff0c;…

探索边缘计算:技术的新疆界

探索边缘计算&#xff1a;技术的新疆界 在当今迅速发展的数字化时代&#xff0c;云计算作为数据处理的主力军已广泛应用。但是&#xff0c;随着物联网&#xff08;IoT&#xff09;设备的急剧增加和数据生成速率的加快&#xff0c;云计算面临着种种挑战。边缘计算因此诞生&…

什么是Dubbo及其主要作用

在微服务架构日益盛行的今天&#xff0c;RPC&#xff08;远程过程调用&#xff09;技术成为了实现服务间通信的关键手段。而Dubbo&#xff0c;作为一款高性能、轻量级的开源Java RPC框架&#xff0c;受到了广大开发者的青睐。那么&#xff0c;Dubbo究竟是什么呢&#xff1f;它的…

STL-list的使用及其模拟实现

在C标准库中&#xff0c;list 是一个双向链表容器&#xff0c;用于存储一系列元素。与 vector 和 deque 等容器不同&#xff0c;list 使用带头双向循环链表的数据结构来组织元素&#xff0c;因此list插入删除的效率非常高。 list的使用 list的构造函数 list迭代器 list的成员函…

深度神经网络(DNN)

通过5个条件判定一件事情是否会发生&#xff0c;5个条件对这件事情是否发生的影响力不同&#xff0c;计算每个条件对这件事情发生的影响力多大&#xff0c;写一个深度神经网络&#xff08;DNN&#xff09;模型程序,最后打印5个条件分别的影响力。 示例 在深度神经网络&#xf…

动态规划相关

动态规划相关 力扣509 斐波那契数列 完全递归解法 / 设置备忘录减少递归次数解法 都是 自顶向下力扣 509 斐波那契数列 动态规划 自底向上 力扣509 斐波那契数列 完全递归解法 / 设置备忘录减少递归次数解法 都是 自顶向下 public int fib(int n) {/** if(n<2){* return n;…

Matlab新手快速上手2(粒子群算法)

本文根据一个较为简单的粒子群算法框架详细分析粒子群算法的实现过程&#xff0c;对matlab新手友好&#xff0c;源码在文末给出。 粒子群算法简介 粒子群算法&#xff08;Particle Swarm Optimization&#xff0c;PSO&#xff09;是一种群体智能优化算法&#xff0c;灵感来源于…

【测试总结】测试时如何定位一个bug?是前端还是后端?

作为一道面试题&#xff0c;它算高频了么&#xff1f;我面试别人问多挺多次&#xff0c;我也被面试官问过... 相对来说多少能看出一点测试经验&#xff0c;实际测试中的排查问题能力... 1、前后端bug有各自的一些特点&#xff1a; 前端bug特性&#xff1a;界面相关&#xff0c…

计算机网络(第7版谢希仁)笔记

计算机网络 第一章 概述第二章 物理层第三章、数据链路层第四章 网络层第五章 运输层第六章、应用层第七章 网络安全 第一章 概述 1、三大类网络&#xff1a;电信网络、有线电视网络、计算机网络。 电信网络&#xff1a;提供电话、电报及传真服务。 有线电视网络&#xff1a;向…

目标检测YOLO数据集的三种格式及转换

目标检测YOLO数据集的三种格式 在目标检测领域&#xff0c;YOLO&#xff08;You Only Look Once&#xff09;算法是一个流行的选择。为了训练和测试YOLO模型&#xff0c;需要将数据集格式化为YOLO可以识别的格式。以下是三种常见的YOLO数据集格式及其特点和转换方法。 1. YOL…

计算机系统结构(二) (万字长文建议收藏)

计算机系统结构 (二) 本文首发于个人博客网站&#xff1a;http://www.blog.lekshome.top/由于CSDN并不是本人主要的内容输出平台&#xff0c;所以大多数博客直接由md文档导入且缺少审查和维护&#xff0c;如果存在图片或其他格式错误可以前往上述网站进行查看CSDN留言不一定能够…