ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

ant-design Table 可展开行实战:用 expandedRowRender 打造「详情内嵌」的企业级表格

ant-design Table 可展开行实战:用 expandedRowRender 打造「详情内嵌」的企业级表格 ant-design Table 可展开行实战用 expandedRowRender 打造「详情内嵌」的企业级表格【免费下载链接】ant-designAn enterprise-class UI design language and React UI library项目地址: https://gitcode.com/gh_mirrors/antde/ant-design当表格的一行内容较多、无法一次性完整展示时展开行是兼顾「信息密度」与「阅读清晰度」的经典交互方案。本篇文章以 ant-design 组件库中 components/table/demo/expand.md 官方示例为主线系统讲解expandedRowRender的使用方式、默认展开控制、展开图标在源码与样式层的工作机制并延伸到树形数据children等相近场景帮助你直接上手实现可展开的企业级表格。展开行适用的业务场景正如官方示例的说明当表格内容较多不能一次性完全展示时适合使用可展开行。典型场景包括主列只保留姓名、年龄、住址等核心字段把自我介绍、备注、详情等大段文本收进展开区域主表展示订单概要展开行内展示订单明细、物流轨迹等关联信息列表页与详情页的折中方案减少页面跳转提升操作效率。展开行的核心价值在于主表保持「一行一屏」的简洁密度用户按需点击展开阅读详情。官方示例完整可运行代码以下是 components/table/demo/expand.md 中提供的完整示例它演示了最基础的展开行用法import { Table } from antd; const columns [ { title: 姓名, dataIndex: name, key: name }, { title: 年龄, dataIndex: age, key: age }, { title: 住址, dataIndex: address, key: address }, { title: 操作, dataIndex: , key: x, render: () a href#删除/a } ]; const data [ { key: 1, name: 胡彦斌, age: 32, address: 西湖区湖底公园1号, description: 我是胡彦斌今年32岁住在西湖区湖底公园1号。 }, { key: 2, name: 吴彦祖, age: 42, address: 西湖区湖底公园2号, description: 我是吴彦祖今年42岁住在西湖区湖底公园2号。 }, { key: 3, name: 李大嘴, age: 32, address: 西湖区湖底公园3号, description: 我是李大嘴今年32岁住在西湖区湖底公园3号。 } ]; ReactDOM.render( Table columns{columns} expandedRowRender{record p{record.description}/p} dataSource{data} classNametable / , mountNode);这个示例揭示了展开行实现的关键只需要在Table上传入一个expandedRowRender函数即可为每一行开启展开能力无需修改columns与dataSource的结构。注意示例中的两个细节record参数expandedRowRender接收当前行的数据对象record你可以访问其任意字段如record.description来渲染展开内容每行都要有key示例数据中的key: 1 / 2 / 3是 React 数组渲染的唯一标识也是表格内部定位行、控制展开状态的基础。若你的数据主键不叫key请务必通过rowKey指定否则控制台会给出警告并可能出现展开状态错乱的奇怪问题详见 components/table/index.md 的「注意」章节。expandedRowRender 与相关 API 详解在 components/table/index.md 的 Table API 表格中与展开行直接相关的参数如下参数说明类型默认值expandedRowRender额外的展开行Function-defaultExpandedRowKeys默认展开的行Array-expandedRowRender开启展开能力的开关类型Function(record) React.Element接收当前行的record数据返回要渲染的展开区域内容未设置时表格不渲染展开图标也不具备展开能力设置后表格会在第一列前自动插入一个展开图标列点击图标即可展开/收起该行。从源码看components/table/index.jsx 中通过以下逻辑决定是否渲染展开图标独立列const expandIconAsCell this.props.expandedRowRender this.props.expandIconAsCell ! false;即只要传入了expandedRowRender且未显式关闭expandIconAsCell展开图标就会以独立单元格的形式出现在行首默认expandIconAsCell为true。图标列的位置由 components/table/index.jsx 决定expandIconColumnIndex{(columns[0] columns[0].key selection-column) ? 1 : 0}也就是说如果同时开启了行选择rowSelection选择列 key 为selection-column展开图标列会自动顺延到第 1 列避免与选择列冲突。defaultExpandedRowKeys默认展开指定行如果希望进入页面时某些行就处于展开状态可以传入默认展开行的 key 数组Table columns{columns} dataSource{data} expandedRowRender{record p{record.description}/p} defaultExpandedRowKeys{[1, 3]} /上例中key为1和3的行在首次渲染时即展开其余行保持收起。数组中的值与dataSource里每行的key或rowKey函数返回的主键一一对应。展开图标的样式机制加号与减号展开行的交互反馈主要由样式层完成。style/components/table.less 定义了展开图标与展开行的视觉规范展开图标.ant-table-row-expand-icon是一个18px × 18px、带边框的方块cursor: pointer默认展示收起态行处于展开态时追加ant-table-row-expanded类:after内容切换为-收起态ant-table-row-collapsed的:after内容为无子数据的行会渲染隐藏的.ant-table-row-spaced占位图标:after内容为.保证各行列宽对齐展开行区域tr.ant-table-expanded-row使用浅灰背景#fbfbfb与主行形成视觉区隔。因此如果你希望调整展开图标的大小、颜色或展开行背景色在对应 less 变量上覆盖即可无需改动组件逻辑。深入源码展开与数据渲染的配合展开行并不是额外插入的独立数据行而是与表格的主渲染流程协同工作的表格主体渲染由rc-table完成components/table/index.jsx 中AntTable将排序、筛选、分页后的当前页数据data与处理后的columns透传给底层Table展开图标列的位置在columns经过renderRowSelection行选择列与renderColumnsDropdown排序/筛选按钮处理之后统一确定保证与选择列、筛选列共存时布局正确分页、排序、筛选会作用于主行数据见getCurrentPageData、getLocalData展开内容则跟随record一并渲染天然与主行保持同步。从源码结构看展开行的设计理念是「数据独立、渲染联动」主行负责概要信息expandedRowRender负责详情信息二者通过record关联互不污染columns配置。与树形数据children的区分与选择可展开行常与树形数据展示混淆但二者语义不同可展开行expandedRowRender针对「单层数据 额外详情」的场景展开区由你自定义渲染任意内容富文本、图表、子表格皆可components/table/demo/expand.md 即此场景树形数据children针对「数据本身存在层级关系」的场景通过数据项中的children字段递归展示示例见 components/table/demo/expand-children.md。树形数据支持通过indentSize控制每层缩进宽度components/table/index.md 中默认值为 15px源码 components/table/index.jsx 中实际默认值为 20并可通过rowSelection配合行选择但官方注明暂不支持父子数据递归关联选择。在选择方案时遵循一个简单原则数据扁平、详情异构 → 用expandedRowRender数据天然嵌套、需要层级浏览 → 用children树形数据。若两者结合使用树形数据的节点同样可以配合expandedRowRender提供更丰富的展开内容。组合实战建议基于官方示例与源码给出几条可直接落地的组合建议展开行内嵌子表格expandedRowRender返回Table组件实现「主从表」联动例如订单列表展开后显示订单明细与行选择共存同时使用rowSelection与expandedRowRender时展开图标列会自动调整到选择列之后源码expandIconColumnIndex的自动判断无需手动处理列顺序配合 loading 与分页展开行内容随主行一起经历分页、排序、筛选保持数据一致性大数据量时可在展开内容里做异步加载点击展开时再请求详情务必保证每行主键唯一展开状态、选择状态都依赖key定位使用rowKey显式声明主键是展开功能稳定运行的前提。小结通过 components/table/demo/expand.md 这份官方示例可以看到ant-design Table 的展开行功能仅需一个expandedRowRender即可开启配合defaultExpandedRowKeys可以控制默认展开状态加上源码中expandIconAsCell、expandIconColumnIndex的自动处理与样式层/-图标的完整实现构成了一个「配置极简、扩展自由」的企业级交互方案。无论是要解决「内容太多放不下」的信息密度问题还是要搭建主从表联动它都是一个开箱即用的可靠选择。【免费下载链接】ant-designAn enterprise-class UI design language and React UI library项目地址: https://gitcode.com/gh_mirrors/antde/ant-design创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表