React TreeSelect 组件使用和优化

news2025/1/11 23:58:57

1、自定义折叠和展开图标

此时就要用到switcherIcon属性,以下是antd中对switcherIcon属性的描述,

switcherIcon自定义树节点的展开/折叠图标ReactNode | ((props: AntTreeNodeProps) => ReactNode)-

具体使用如下:

import { DownOutlined } from '@ant-design/icons';
...
<TreeSelect
   switcherIcon={<DownOutlined />}
   ... 
/>

2、如何在title后添加任意组件

例如添加Rate组件,其实就是 treeData 数据中title定义为ReactNode类型,

 代码如下

const desc = ['terrible', 'bad', 'normal', 'good', 'wonderful'];
[{
   key: '重量', selectable: false, value: '重量',
    title: (
      <span style={{ color: '#212529' }} >
        重量
      </span><Rate style={{marginLeft:'18px'}} tooltips={desc}  value="3" /></>
    ),}]

3、如何优化展开或者收缩功能,使用更人性化

用户反馈每次点击前面的收缩和展开按钮,位置太小,体验很不好,要是能点击当前行的任意位置都可以展开和收缩,那该多好,效果如下图所示

但是看了Antd 中TreeSelect组件,若不做调整优化,只有点击收缩图标才能展开或者收缩,体验很不好

 例如上图看到的效果,点击文字却不能收缩或者展开,用户想要的效果是这样的,点击的一级节点任意位置都可以收缩或者展开,同时也可以搜索,搜索就要用到TreeSelect的onSearch属性

 想要实现上述效果,要用到的组件TreeSelct组件的onTreeExpand、treeExpandedKeys

 <TreeSelect
        onSelect={(value) => {
          props.onChange && props.onChange(value);
        }}
         // 搜索框输入值后触发,需过滤后数据并展开
        onSearch={(value) => {
          filterSearchValue(value);
        }}
        style={{
          width: '100%',
        }}
        onTreeExpand={(data) => {
          setExpandedKeys([...(data || [])]);
        }}
        // 点击文本展开或者收缩
        onClick={(event) => {
         ...
        }}
        treeExpandedKeys={expandedKeys}
        value={value}
        dropdownStyle={{
          maxHeight: 400,
          overflow: 'auto',
        }}
        treeData={unitTreeData}
        placeholder="Please select"
        // treeDefaultExpandAll // 是否默认展开
        onChange={onChange}
      />

    </>

下面我来下antd 中TreeSelect有哪些属性,

参数说明类型默认值版本
allowClear显示清除按钮booleanfalse
autoClearSearchValue当多选模式下值被选择,自动清空搜索框booleantrue
bordered是否显示边框booleantrue
defaultValue指定默认选中的条目string | string[]-
disabled是否禁用booleanfalse
popupClassName下拉菜单的 className 属性string-4.23.0
dropdownMatchSelectWidth下拉菜单和选择器同宽。默认将设置 min-width,当值小于选择框宽度时会被忽略。false 时会关闭虚拟滚动boolean | numbertrue
dropdownRender自定义下拉框内容(originNode: ReactNode, props) => ReactNode-
dropdownStyle下拉菜单的样式object-
fieldNames自定义节点 label、value、children 的字段object{ label: label, value: value, children: children }4.17.0
filterTreeNode是否根据输入项进行筛选,默认用 treeNodeFilterProp 的值作为要筛选的 TreeNode 的属性值boolean | function(inputValue: string, treeNode: TreeNode) (函数需要返回 bool 值)function
getPopupContainer菜单渲染父节点。默认渲染到 body 上,如果你遇到菜单滚动定位问题,试试修改为滚动的区域,并相对其定位。示例function(triggerNode)() => document.body
labelInValue是否把每个选项的 label 包装到 value 中,会把 value 类型从 string 变为 {value: string, label: ReactNode, halfChecked(treeCheckStrictly 时有效): string[] } 的格式booleanfalse
listHeight设置弹窗滚动高度number256
loadData异步加载数据function(node)-
maxTagCount最多显示多少个 tag,响应式模式会对性能产生损耗number | responsive-responsive: 4.10
maxTagPlaceholder隐藏 tag 时显示的内容ReactNode | function(omittedValues)-
multiple支持多选(当设置 treeCheckable 时自动变为 true)booleanfalse
notFoundContent当下拉列表为空时显示的内容ReactNodeNot Found
placeholder选择框默认文字string-
placement选择框弹出的位置bottomLeft bottomRight topLeft topRightbottomLeft
searchValue搜索框的值,可以通过 onSearch 获取用户输入string-
showArrow是否显示 suffixIcon,单选模式下默认 trueboolean-
showCheckedStrategy配置 treeCheckable 时,定义选中项回填的方式。TreeSelect.SHOW_ALL: 显示所有选中节点(包括父节点)。TreeSelect.SHOW_PARENT: 只显示父节点(当父节点下所有子节点都选中时)。 默认只显示子节点TreeSelect.SHOW_ALL | TreeSelect.SHOW_PARENT | TreeSelect.SHOW_CHILDTreeSelect.SHOW_CHILD
showSearch是否支持搜索框boolean单选:false | 多选:true
size选择框大小large | middle | small-
status设置校验状态'error' | 'warning'-4.19.0
suffixIcon自定义的选择框后缀图标, 多选模式下必须同时设置 showArrow 为 trueReactNode-
switcherIcon自定义树节点的展开/折叠图标ReactNode | ((props: AntTreeNodeProps) => ReactNode)-renderProps: 4.20.0
tagRender自定义 tag 内容,多选时生效(props) => ReactNode-
treeCheckable显示 Checkboxbooleanfalse
treeCheckStrictlycheckable 状态下节点选择完全受控(父子节点选中状态不再关联),会使得 labelInValue 强制为 truebooleanfalse
treeDatatreeNodes 数据,如果设置则不需要手动构造 TreeNode 节点(value 在整个树范围内唯一)array<{value, title, children, [disabled, disableCheckbox, selectable, checkable]}>[]
treeDataSimpleMode使用简单格式的 treeData,具体设置参考可设置的类型 (此时 treeData 应变为这样的数据结构: [{id:1, pId:0, value:'1', title:"test1",...},...], pId 是父节点的 id)boolean | object<{ id: string, pId: string, rootPId: string }>false
treeDefaultExpandAll默认展开所有树节点booleanfalse
treeDefaultExpandedKeys默认展开的树节点string[]-
treeExpandAction点击节点 title 时的展开逻辑,可选:false | click | doubleClickstring | booleanfalse4.21.0
treeExpandedKeys设置展开的树节点string[]-
treeIcon是否展示 TreeNode title 前的图标,没有默认样式,如设置为 true,需要自行定义图标相关样式booleanfalse
treeLine是否展示线条样式,请参考 Tree - showLineboolean | objectfalse4.17.0
treeLoadedKeys(受控)已经加载的节点,需要配合 loadData 使用string[][]
treeNodeFilterProp输入项过滤对应的 treeNode 属性stringvalue
treeNodeLabelProp作为显示的 prop 设置stringtitle
value指定当前选中的条目string | string[]-
virtual设置 false 时关闭虚拟滚动booleantrue4.1.0
onChange选中树节点时调用此函数function(value, label, extra)-
onDropdownVisibleChange展开下拉菜单的回调function(open)-
onSearch文本框值变化时的回调function(value: string)-
onSelect被选中时调用function(value, node, extra)-
onTreeExpand展示节点时调用function(expandedKeys)-

Tree 方法#

名称描述版本
blur()移除焦点
focus()获取焦点

TreeNode props#

建议使用 treeData 来代替 TreeNode,免去手工构造麻烦

参数说明类型默认值版本
checkable当树为 Checkbox 时,设置独立节点是否展示 Checkboxboolean-
disableCheckbox禁掉 Checkboxbooleanfalse
disabled是否禁用booleanfalse
isLeaf是否是叶子节点booleanfalse
key此项必须设置(其值在整个树范围内唯一)string-
selectable是否可选booleantrue
title树节点显示的内容ReactNode---
value默认根据此属性值进行筛选(其值在整个树范围内唯一)string-

 参考:树选择 TreeSelect - Ant Design

核心就是treeExpandedKeys可控,用户自定义treeExpandedKeys,若是需要源码的可以私信留言。

关键词:TreeSelect 、Antd、树形控件、React

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/75094.html

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

相关文章

数据库原理及MySQL应用 | 事件

事件由一个特定的线程——事件调度器来管理&#xff0c;事件是根据指定时间表&#xff0c;在某一特定的时间点&#xff0c;触发相关的SQL语句或存储过程。 01、事件概述 事件(Event)是根据指定时间表执行的任务&#xff0c;是MySQL在相应的时刻调用的过程式数据库对象。它由事…

抓包分析ssh远程主机为何变慢了?

文章目录背景SSH协议握手过程ssh 抓包MAC层包传输tcp握手抓包解释三次握手的第一个报文- SYN包第一个报文对应的抓包详情三次握手的第二个报文- SYNACK包第二个报文对应的抓包详情三次握手的第三个报文- ACK包第三个报文对应的抓包详情ssh版本协议交换密钥协商key阶段Key Excha…

程序员的工资这么高,为什么还会有人离职?

出了社会以后才发现&#xff0c;班级里天天打鸡血的、最奋斗的、同时也最焦虑的&#xff0c;不是成绩最好的&#xff0c;也不是成绩最差的&#xff0c;而是那帮处于中间的人。 他们不像那些成绩最差的&#xff0c;或是天天摆烂&#xff0c;或是靠高情商混得风生水起&#xff1b…

Pytest----pluggy源码解读基础准备

【原文链接】Pytest----pluggy源码解读基础准备 解读pluggy源码&#xff0c;直接使用pytest环境中安装的pluggy即可&#xff0c;比如这里安装的pluggy版本是1.0.0&#xff0c;为了更好的理解源码&#xff0c;这里首先使用如下应用代码作为应用实例&#xff0c;从如下代码中可以…

低代码助力生产管理:离散型制造业MES系统

制造业作为我国国民经济的支柱产业&#xff0c;在我国经济增长中占有主导作用。而制造业对经济增长的贡献很大一部分来自于以离散制造业为代表的机械装备制造、汽车零部件制造等。因此&#xff0c;离散制造业的发展对我国经济增长具有举足轻重的作用。 离散型制造业的特点&…

中创股份在科创板提交上会稿:计划募资6亿元,景新海为董事长

12月8日&#xff0c;山东中创软件商用中间件股份有限公司&#xff08;下称“中创股份”&#xff09;在上海证券交易所科创板提交招股书&#xff08;上会稿&#xff09;。相较于此前招股书&#xff0c;中创股份补充了截至2022年9月30日的财务数据等信息。 据贝多财经了解&#x…

记一次 Eclipse 打包的辛酸历程

文章目录1&#xff1a;背景2 maven 工程3 普通工程3.1 打可执行的 jar3.2 打普通 jar4&#xff1a; 运行 jar 包1&#xff1a;背景 偶然的境况下&#xff0c;被迫使用了 Eclipse 进行代码。遇到的代码也有点奇怪&#xff0c;main 方法启动 java 工程&#xff0c;里面封装 Tomc…

音频声音信号

音频信号是模拟信号&#xff0c;我们需要将其保存为数字信号&#xff0c;才能对语音进行算法操作&#xff0c;WAV是Microsoft开发的一种声音文件格式&#xff0c;通常被用来保存未压缩的声音数据。 通道数&#xff1a;同时有个几个设备在进行音频的采样&#xff1b;采样频率&a…

Django连接MySQL与正反向迁移命令

目录 连接MySQL 方法一&#xff1a;pymysql连接 方法二&#xff1a;mysqlclient 迁移命令 连接MySQL 方法一&#xff1a;pymysql连接 第一步&#xff1a;修改settings.py配置文件中的DATABASES&#xff1a; DATABASES {default: {ENGINE: django.db.backends.mysql,HOS…

【车载开发系列】UDS诊断---动态定义DID($0x2C)

【车载开发系列】UDS诊断—动态定义DID&#xff08;$0x2C&#xff09; UDS诊断---动态定义DID&#xff08;$0x2C&#xff09;【车载开发系列】UDS诊断---动态定义DID&#xff08;$0x2C&#xff09;一.概念定义1&#xff09;DID定义方式2&#xff09;DID失效条件二.应用场景三.报…

【Python游戏】今天小编用Python实现了一个植物大战僵尸小游戏 | 附源码

前言 halo&#xff0c;包子们下午好 今天给打击整一个植物大战僵尸 无广告版本 哈哈 说实话&#xff0c;现在的小游戏很多都是有广告&#xff0c;多少有点难受 今天给大家直接安排 相关文件 关注小编&#xff0c;私信小编领取哟&#xff01; 当然别忘了一件三连哟~~ 源码点…

java基于Springboot的社区维修平台-计算机毕业设计

项目介绍 系统管理也都将通过计算机进行整体智能化操作&#xff0c;对于社区维修平台所牵扯的管理及数据保存都是非常多的&#xff0c;例如住户管理、社区公告管理、维修工管理、维修订单管理、接单信息管理、订单信息管理、在线沟通管理、举报信息管理、留言板管理、系统管理…

4G远程智能巡检摄像机功耗测试对比

对于一款输电线路监控设备&#xff0c;由于装在铁塔上面&#xff0c;对于功耗&#xff0c;电网上面的应用&#xff0c;尤为重要&#xff0c;如何得做到低功耗&#xff0c;一直大家研究的地方&#xff0c;解决了功耗&#xff0c;基本产品成功了一半&#xff0c;而合方圆在电网行…

对称加密算法(一)(替换算法,Caesar, Playfair, Hill Cipher,Polyalphabetic Cipher)

文章目录Symmetric Cipher ModelSubstitution TechniquesCaesar CipherMonoalphabetic CiphersPlayfair CipherHill CipherPolyalphabetic CipherVigenere CipherVernam CipherOne-Time PadReferences对称加密&#xff0c;也被称为传统加密、单钥加密或私钥加密&#xff0c;是 …

Flink系列-1、流式计算简介

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 大数据系列文章目录 官方网址&#xff1a;https://flink.apache.org/ 学习资料&#xff1a;https://flink-learning.org.cn/ 目录数据的时效性…

【pytorch】使用pytorch自己实现LayerNorm

pytorch中使用LayerNorm的两种方式&#xff0c;一个是nn.LayerNorm,另外一个是nn.functional.layer_norm 1. 计算方式 根据官方网站上的介绍&#xff0c;LayerNorm计算公式如下。 公式其实也同BatchNorm,只是计算的维度不同。 下面通过实例来走一遍公式 假设有如下的数据 …

JQuery 高级

目录 1. 动画 1. 三种方式显示和隐藏元素 1. 默认显示和隐藏方式 2. 滑动显示和隐藏方式 2. 遍历 1. js的遍历方式 2. jq的遍历方式 5. 插件&#xff1a;增强JQuery的功能 1 . 实现方式&#xff1a; 1. $.fn.extend(object) * 增强通过Jquery获取的对象的…

java计算机毕业设计ssm学生宿舍管理系统efyug(附源码、数据库)

java计算机毕业设计ssm学生宿舍管理系统efyug&#xff08;附源码、数据库&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff0…

取余,模运算,余数的正负问题,1497. 检查数组对是否可以被 k 整除

首先&#xff0c;我们来看数学中对余数的定义 0到除数之间的整数&#xff0c;所以当除数是负数的时候&#xff0c;余数也是负数。 举个例子&#xff1a; 接下来&#xff0c;我们看计算机中余数是怎么求的&#xff1f;&#xff1f;&#xff1f; 所有的语言和计算器都遵循了让商…

防火墙豁免实验

♥️作者&#xff1a;小刘在C站 ♥️每天分享云计算网络运维课堂笔记&#xff0c;疫情之下&#xff0c;你我素未谋面&#xff0c;但你一定要平平安安&#xff0c;一 起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的&#xff0c;绽放&#xff0c;愿…