当前位置: 首页 > article >正文

antd 表格固定列与横向滚动条实战:解决多列数据展示难题

1. 为什么需要固定列和横向滚动条后台管理系统中最常见的组件之一就是表格。当表格列数较少时我们可以轻松地展示所有数据。但现实开发中经常会遇到需要展示几十个字段的情况。这时候如果让表格自然伸展页面就会变得非常宽用户需要不断左右拖动浏览器滚动条才能查看完整数据体验非常糟糕。我接手过一个电商后台项目商品列表需要展示基础信息、库存、价格、促销等近30个字段。最初没有做任何优化结果运营同事抱怨说每次查数据都要像打乒乓球一样左右摇头。这就是典型的列数过多导致的用户体验问题。antd的固定列功能配合横向滚动条可以完美解决这个痛点。固定重要列如名称、操作栏让其他列通过横向滚动查看。这样用户始终能看到关键信息又能通过手势查看详细数据。就像Excel的冻结窗格功能既保持上下文又不会迷失在数据海洋中。2. 基础配置实战2.1 固定列的核心配置固定列的实现主要依赖columns配置中的fixed属性。这个属性支持三个值left固定在左侧right固定在右侧不设置或false不固定参与横向滚动const columns [ { title: 姓名, dataIndex: name, key: name, width: 120, fixed: left // 固定在左侧 }, { title: 年龄, dataIndex: age, key: age, width: 80 // 不固定会随横向滚动移动 }, { title: 操作, key: action, width: 100, fixed: right, // 固定在右侧 render: (_, record) ( a onClick{() handleEdit(record)}编辑/a ) } ]实际项目中我发现几个容易踩的坑固定列必须设置width否则antd会报错固定列和非固定列之间要有明显区分通常固定列展示关键信息不要固定太多列一般左侧1-2列右侧操作栏固定即可2.2 横向滚动条的关键参数光设置固定列还不够必须配合scroll.x才能出现横向滚动条。这个参数决定了表格的可滚动宽度。Table columns{columns} dataSource{data} scroll{{ x: 1500 }} // 关键配置 /这里有个重要原则scroll.x的值应该大于表格所有列宽之和。我通常这样做计算所有列width的总和在这个总和基础上增加100-200px作为缓冲如果UI设计稿总宽度是1200px可以设置scroll.x1300曾经有个项目我设置了scroll.x1000但实际列宽总和是1050结果出现了诡异的双重滚动条。所以一定要确保scroll.x足够大。3. 高级技巧与最佳实践3.1 动态计算scroll.x硬编码scroll.x虽然简单但在响应式布局中可能不适用。更好的做法是动态计算// 计算所有列宽总和 const calcTableWidth (columns) { return columns.reduce((sum, col) sum (col.width || 0), 0) } function MyTable() { const [tableWidth, setTableWidth] useState(0) useEffect(() { const width calcTableWidth(columns) setTableWidth(width 100) // 增加缓冲 }, [columns]) return ( Table columns{columns} scroll{{ x: tableWidth }} / ) }这种方法特别适合列数动态变化的场景比如允许用户自定义显示哪些列。3.2 固定列样式优化默认的固定列会有阴影效果但有时需要自定义样式。可以通过覆盖antd的CSS类来实现/* 修改固定列阴影颜色 */ .ant-table-fixed-left, .ant-table-fixed-right { box-shadow: 0 0 8px rgba(0, 0, 0, 0.1); } /* 固定列hover效果 */ .ant-table-fixed-columns-in-body:hover td { background: #fafafa; }如果固定列和非固定列需要视觉区分可以给固定列添加背景色const columns [ { title: 姓名, fixed: left, className: fixed-column // 自定义类名 } ].fixed-column { background-color: #f7f7f7; }4. 常见问题排查4.1 滚动条不出现的情况经常有开发者反馈设置了fixed和scroll.x但滚动条不出现。常见原因有scroll.x值小于实际列宽总和表格外层容器有overflow: hidden样式某些列没有设置width导致antd无法正确计算总宽度解决方案检查浏览器控制台是否有antd的警告信息确保所有列都设置了合理的width给表格外层div添加边框检查布局是否正常4.2 固定列出现错位在数据动态加载或列宽变化时固定列可能出现错位。这时可以调用表格实例的forceUpdate方法const tableRef useRef() // 数据更新后重新计算布局 useEffect(() { tableRef.current?.forceUpdate() }, [data]) return ( Table ref{tableRef} columns{columns} dataSource{data} / )另一种情况是浏览器缩放导致错位。这时可以监听resize事件useEffect(() { const handleResize () { tableRef.current?.forceUpdate() } window.addEventListener(resize, handleResize) return () window.removeEventListener(resize, handleResize) }, [])5. 性能优化建议当表格数据量很大时如1000行固定列和横向滚动可能会影响性能。我总结了几点优化经验虚拟滚动antd 4.0支持虚拟滚动可以大幅提升性能Table scroll{{ x: 1500, y: 500 }} virtual /分页加载即使使用虚拟滚动也建议配合分页Table pagination{{ pageSize: 50, showSizeChanger: true }} /按需渲染复杂单元格内容使用shouldUpdate优化{ title: 详情, render: (_, record) ( CellShouldUpdate record{record} / ) }减少不必要的列通过配置让用户自定义显示列const [visibleColumns, setVisibleColumns] useState([name, age]) const filteredColumns columns.filter(col visibleColumns.includes(col.key) )在实际项目中我通常会先实现基本功能然后根据性能测试结果逐步应用这些优化策略。特别是当用户反馈滚动卡顿时虚拟滚动往往是立竿见影的解决方案。

相关文章:

antd 表格固定列与横向滚动条实战:解决多列数据展示难题

1. 为什么需要固定列和横向滚动条 后台管理系统中最常见的组件之一就是表格。当表格列数较少时,我们可以轻松地展示所有数据。但现实开发中,经常会遇到需要展示几十个字段的情况。这时候如果让表格自然伸展,页面就会变得非常宽,用…...

别再纠结网关和APP了!手把手教你用Matter+Thread+Wi-Fi打造全屋智能(附设备选购清单)

别再纠结网关和APP了!手把手教你用MatterThreadWi-Fi打造全屋智能(附设备选购清单) 装修新家或改造旧房时,最让人头疼的莫过于智能家居的兼容性问题。去年我帮朋友布置新房,光是协调不同品牌的智能灯泡、门锁和摄像头就…...

Anaconda环境下配置水墨江南模型开发实战

Anaconda环境下配置水墨江南模型开发实战 最近有不少朋友在尝试运行一些新的AI模型时,遇到了环境依赖冲突的麻烦。今天咱们就来聊聊,怎么用Anaconda这个“环境管理神器”,为水墨江南这类模型搭建一个干净、独立的开发环境。整个过程其实不难…...

3步完成专业级背景移除:免费AI工具backgroundremover终极指南

3步完成专业级背景移除:免费AI工具backgroundremover终极指南 【免费下载链接】backgroundremover Background Remover lets you Remove Background from images and video using AI with a simple command line interface that is free and open source. 项目地址…...

告别卡顿!用FRP内网穿透解决校园网AP隔离下的远程桌面连接问题

突破校园网限制:FRP内网穿透实现高效远程桌面连接 校园网络环境中的AP隔离机制常常成为远程办公和学习的技术障碍。当你在实验室电脑前突然需要调取宿舍电脑的资料,或是教授希望远程指导学生的实验操作时,传统远程桌面方案在AP隔离环境下往往…...

GradNorm:多任务学习中的自适应梯度平衡策略

1. GradNorm是什么?为什么我们需要它 第一次接触多任务学习时,我遇到了一个头疼的问题:明明给模型设计了完美的共享层结构,训练时却总是发现某个任务"霸占"了整个模型。比如同时做图像分类和物体检测时,分类…...

DeerFlow实战效果:一键生成播客内容的神奇体验

DeerFlow实战效果:一键生成播客内容的神奇体验 1. DeerFlow播客生成功能初体验 1.1 从零开始创建第一个播客 第一次使用DeerFlow生成播客的经历让我印象深刻。在Web界面简单输入"生成一期关于人工智能在医疗领域应用的15分钟播客"后,系统在…...

基于Flink的智慧景区实时人流监控与热点预测系统

基于Flink的智慧景区实时人流监控与热点预测系统 摘要 随着旅游业的蓬勃发展,景区人流量管理面临巨大挑战。传统基于事后统计的管理方式无法满足实时疏导、预警和资源调度的需求。本文设计并实现了一套基于Apache Flink的智慧景区实时人流监控与热点预测系统。系统通过采集景…...

轻松掌握RSSHub-Radar:浏览器扩展实现高效RSS订阅全攻略

轻松掌握RSSHub-Radar:浏览器扩展实现高效RSS订阅全攻略 【免费下载链接】RSSHub-Radar 🍰 Browser extension that simplifies finding and subscribing RSS and RSSHub 项目地址: https://gitcode.com/gh_mirrors/rs/RSSHub-Radar 在信息爆炸的…...

Diff-Font: Diffusion Model for Robust One-Shot Font Generation(用于稳健的单样本字体生成的扩散模型)

第一次将Diffusion Model用到少样本字体生成领域,核心思想是:使用条件扩散模型,将字体风格,骨架,笔画(部件)类型和数量,作为条件指导少样本字体生成 一. 条件信息提取 我们先看风格提…...

避坑指南:Halcon模板匹配中差异模型的6个常见误用场景

Halcon差异模型实战避坑:从原理到工业检测的6个关键误区 在工业视觉检测领域,Halcon的Variation Model(差异模型)就像一位经验丰富的质检员,能够敏锐捕捉产品表面的细微异常。但这位"质检员"的工作表现&…...

三大开源智能家居平台对比:Home Assistant vs openHAB vs Domoticz,哪个更适合你?

三大开源智能家居平台深度横评:从技术架构到场景化落地 当清晨的第一缕阳光透过窗帘,卧室灯光自动调亮到舒适色温;下班回家时,空调已提前启动到适宜温度;厨房烟雾传感器触发警报时,系统能自动关闭燃气阀门并…...

HTB靶机Cap实战:从端口扫描到Root提权完整攻略(附避坑指南)

HTB靶机Cap实战:从端口扫描到Root提权完整攻略(附避坑指南) 在网络安全实战训练平台Hack The Box(HTB)中,Cap靶机以其精巧的设计成为渗透测试初学者的绝佳练手目标。本文将带您完整复现从初始信息收集到最终…...

跨域iframe样式修改实战:postMessage与CSS动态注入

1. 跨域iframe样式修改的常见场景 在实际开发中,我们经常会遇到需要修改iframe内嵌页面样式的需求。比如在第三方服务集成时,你可能需要调整嵌入的客服系统界面风格,让它与你的网站设计保持一致;或者在构建微前端架构时&#xff0…...

Unity Addressables运行时内存管理避坑指南:从引用计数到AssetBundle卸载

Unity Addressables运行时内存管理深度解析:从原理到实战优化 1. 引用计数机制与内存泄漏陷阱 Addressables系统的引用计数机制看似简单,却隐藏着许多开发者容易忽视的细节。让我们深入剖析这个核心系统的工作原理:引用计数层级:A…...

新手避坑指南:用C语言操作txt文件时最容易犯的5个错误(基于EDUcoder实训案例)

C语言文件操作避坑实战:从EDUcoder案例解析5大经典错误 第一次用C语言操作文件时,我盯着屏幕上那个神秘的FILE*指针发了半小时呆——明明代码和教材示例一模一样,为什么运行时总是报"Segmentation fault"?直到深夜调试才…...

保姆级教程:用VMware+URSim 3.13.1搭建虚拟机械臂环境,手把手配置网络避坑

虚拟机械臂开发环境搭建全指南:从VMware配置到Unity通信实战 引言:为什么选择URSim进行机械臂仿真开发 在工业自动化和机器人研究领域,虚拟仿真环境已经成为开发流程中不可或缺的一环。对于Universal Robots(UR)机械臂开发者而言,…...

Termux+Vim打造移动端C++开发神器:保姆级插件配置与快捷键优化指南

TermuxVim打造移动端C开发神器:保姆级插件配置与快捷键优化指南 在咖啡厅等车时调试算法,在地铁上快速修复线上bug,在出差途中完善项目文档——移动开发者的工作场景正在突破传统办公环境的限制。但Android设备上缺乏专业级C开发工具的问题&…...

计算机毕业设计springboot基于web的同城上门喂遛宠物管理系统 基于SpringBoot的社区宠物托管与上门服务平台 SpringBoot框架下的城市宠物居家照料服务系统

计算机毕业设计springboot基于web的同城上门喂遛宠物管理系统24hxm305 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着城市化进程的不断推进,现代都市人的生活节…...

DAMOYOLO-S集成JavaScript前端:打造交互式Web目标检测Demo

DAMOYOLO-S集成JavaScript前端:打造交互式Web目标检测Demo 1. 引言 你有没有想过,把一个强大的目标检测模型,变成一个在浏览器里就能直接玩的工具?比如上传一张街景照片,网页上立刻就能框出所有的车辆和行人&#xf…...

我让AI开发一个完整项目,结果离谱了(全流程实测)

最近我做了一个“有点离谱”的实验:👉 不写一行代码,让AI帮我开发一个完整项目。结果是:项目真的跑起来了功能基本完整甚至代码结构还不错但同时也出现了一些“很真实的问题”。这篇文章,我把整个过程完整复盘给你看&a…...

含电转气和碳捕集耦合的综合能源系统多时间尺度优化调度探索

【文章复现】含电转气和碳捕集耦合的综合能源系统多时间尺度优化调度。 代码为本人自己编写 碳;mpc;多时间尺度优化;综合能源:碳捕集 运行平台:matlabyalmipcplex在能源领域不断探索可持续发展道路的当下,含…...

避开这些坑!BurpSuite时间盲注爆破的正确配置指南(含线程优化技巧)

避开这些坑!BurpSuite时间盲注爆破的正确配置指南(含线程优化技巧) 时间盲注作为SQL注入的高级技术,对渗透测试工具的配置提出了严苛要求。许多中级用户在BurpSuite实操中常陷入"明明payload正确却无法识别延迟响应"的困…...

基于 MIPS 架构的跨境充电桩链路检测与底层自愈实现

摘要: 在跨境新能源充电架构中,海外基站的 NAT 映射老化及弱网环境常导致通信隧道假死。单机默认网络协议栈已无法满足高频交易的防掉线需求。本文分享一种在存储受限(4MB 用户 Flash)环境下实现的 C 语言守护进程。该方案通过底层…...

【Dify评估系统成本控制白皮书】:20年LLM工程实战总结的7大降本杠杆与ROI测算模型

第一章:Dify自动化评估系统成本控制的战略定位与核心挑战Dify自动化评估系统在企业AI应用落地过程中,已逐步从“能力验证平台”演进为支撑规模化模型迭代与业务闭环的核心基础设施。其战略定位不再局限于低代码编排与快速原型验证,而是承担起…...

告别复杂配置!LingBot-Depth Docker镜像10分钟快速部署指南

告别复杂配置!LingBot-Depth Docker镜像10分钟快速部署指南 你是不是曾经被复杂的AI模型部署搞得头大?各种依赖包冲突、环境配置问题、版本不兼容……光是安装配置就要花上大半天时间。今天我要介绍的LingBot-Depth Docker镜像,就是来解决这…...

DAY33MLP神经网络的训练

一、 核心知识点回顾 1. 环境配置基础 核心操作:PyTorch 与 CUDA 的安装、验证及环境排查。关键命令: 查看显卡信息:nvidia-smi(CMD 中使用)。CUDA 检查:验证 PyTorch 是否能调用 GPU 加速(.c…...

毕业设计救星:手把手教你用KF-GINS搞定GNSS/INS松组合导航(附代码避坑)

毕业设计实战:从零搭建GNSS/INS松组合导航系统 第一次接触KF-GINS时,我被那些复杂的矩阵运算和坐标系转换搞得晕头转向。作为导航专业的毕业生,我完全理解那种面对开源代码手足无措的感觉——明明知道卡尔曼滤波很重要,但看到满屏…...

欧姆龙CP1H脉冲程序案例及新手入门指南

A1欧姆龙CP1H程序 姆龙标准程序 欧姆龙PLC标准案例模板 本产品适用于新手或者在校生 本程序主要写了欧姆龙CP1H脉冲程序案例, 包含以下: 威纶通触摸屏程序; word详细说明文档 ; 欧姆龙CP1H程序; 里面的文档有详细介绍…...

Turtlebot3+Nav2实战:手把手教你用RVIZ实现室内SLAM建图(避坑指南)

Turtlebot3Nav2实战:从零实现室内SLAM建图的避坑指南 当第一次看到Turtlebot3在未知环境中自主构建地图时,那种科技带来的震撼感至今难忘。作为ROS2生态中最受欢迎的入门级机器人平台,Turtlebot3配合Nav2导航栈能够实现令人惊艳的SLAM建图效果…...