尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

React Native 表格组件完整指南:用 react-native-table-component 快速搞定数据展示

React Native 表格组件完整指南:用 react-native-table-component 快速搞定数据展示 React Native 表格组件完整指南用 react-native-table-component 快速搞定数据展示【免费下载链接】react-native-table-componentBuild table for react native项目地址: https://gitcode.com/gh_mirrors/re/react-native-table-component如果你在 React Native 项目里手动拼过表格多半体会过那种看似简单、实则崩溃的滋味列宽怎么都对不齐、边框总差一像素、数据一变布局就乱套更别提还要往单元格里塞按钮、标签这类交互元素。react-native-table-component 正是为解决这个痛点而生的轻量表格组件库它把表格拆成 Table、Row、Col、Cell 等几个语义清晰的积木让数据展示代码变得一目了然。接下来我会从环境准备讲起带你完成一张带交互按钮的完整表格再分享几个官方文档没写透的进阶细节。为什么选它小而美的三个理由在动手之前先聊聊这个库最打动人的地方方便你判断它是否适合当前项目。体积克制心智负担小。整个库的核心代码只有components/目录下的 4 个组件文件外加一个负责求和计算的工具函数加起来没多少行。引入它不会让 App 变臃肿源码翻一遍就能搞懂原理排查问题也特别方便。组件职责划分清晰。入口文件index.js一共导出 7 个东西Table、TableWrapper、Row、Rows、Col、Cols、Cell。横向用 Row/Rows纵向用 Col/Cols单元格用 Cell容器用 Table几乎见名知义不需要背复杂的配置。数据足够灵活。data属性既可以传字符串数字也可以直接塞一个 React 元素。这意味着按钮、图片、图标可以像普通文本一样出现在表格里交互功能不用绕弯路。3 分钟完成安装与首次引入安装方式和其他 npm 包没有任何区别在你的 React Native 项目根目录执行npm install react-native-table-component --save习惯用 yarn 的话换成下面这行即可yarn add react-native-table-component如果你想直接阅读源码甚至给作者提需求也可以把仓库克隆到本地git clone https://gitcode.com/gh_mirrors/re/react-native-table-component装好之后在需要用到表格的页面里引入组件import { Table, TableWrapper, Row, Rows, Col, Cols, Cell } from react-native-table-component;先来个最简单的成绩单验证一下环境是否通畅。表头用Row渲染正文用Rows一次性铺开borderStyle负责给整张表格画上边框import { StyleSheet, View } from react-native; import { Row, Rows, Table } from react-native-table-component; function ScoreBoard() { const head [科目, 成绩, 等级]; const grades [ [语文, 92, A], [数学, 88, B], [英语, 95, A], ]; return ( View style{styles.shell} Table borderStyle{{ borderWidth: 1, borderColor: #bbd3ea }} Row data{head} style{styles.header} textStyle{styles.headText} / Rows data{grades} textStyle{styles.bodyText} / /Table /View ); } const styles StyleSheet.create({ shell: { flex: 1, padding: 20, paddingTop: 50 }, header: { height: 42, backgroundColor: #dceefc }, headText: { margin: 8, textAlign: center, fontWeight: 600 }, bodyText: { margin: 8, textAlign: center }, });跑起来后你会看到三行三列、带浅蓝边框的表格。因为每行只有三个单元格且没指定宽度它们会自动均分整行宽度——这正是 Cell 的默认行为当width、flex、height和style都没给时它会自动补一个flex: 1。实战打造一张可交互的员工信息表格上面只是开胃菜。真实业务里的表格往往要更复杂有的列宽不一样需要斑马纹最后一列还要放查看详情按钮。下面的例子把这些需求一次性揉在一起你可以在自己的项目里直接改造复用。import React, { Component } from react; import { Alert, StyleSheet, Text, TouchableOpacity, View } from react-native; import { Cell, Row, Table, TableWrapper } from react-native-table-component; const COLUMNS [工号, 姓名, 部门, 状态, 操作]; const STAFF [ [E001, 张伟, 研发部, 在职], [E002, 李娜, 市场部, 在职], [E003, 王芳, 财务部, 休假], ]; const FLEX_PLAN [1, 1, 1.2, 1, 0.9]; export default class StaffTable extends Component { openDetail (index) { Alert.alert(员工详情, 你点击了第 ${index 1} 条记录); }; render() { const actionButton (index) ( TouchableOpacity style{styles.actionBtn} onPress{() this.openDetail(index)} Text style{styles.actionText}查看/Text /TouchableOpacity ); return ( View style{styles.container} Table borderStyle{{ borderWidth: 1, borderColor: #c9d3e0 }} Row data{COLUMNS} flexArr{FLEX_PLAN} style{styles.head} textStyle{styles.headText} / {STAFF.map((record, index) { const cells [...record, actionButton(index)]; return ( TableWrapper key{record[0]} style{[styles.row, index % 2 1 styles.rowAlt]} {cells.map((item, col) ( Cell key{col} data{item} flex{FLEX_PLAN[col]} textStyle{styles.cellText} / ))} /TableWrapper ); })} /Table /View ); } } const styles StyleSheet.create({ container: { flex: 1, padding: 16, paddingTop: 40, backgroundColor: #f7f9fc }, head: { height: 44, backgroundColor: #32465f }, headText: { margin: 8, color: #fff, fontWeight: 700, textAlign: center }, row: { flexDirection: row, minHeight: 46, backgroundColor: #fff }, rowAlt: { backgroundColor: #f0f4f9 }, cellText: { margin: 8, textAlign: center }, actionBtn: { width: 54, height: 24, borderRadius: 4, backgroundColor: #3f8cff, alignSelf: center }, actionText: { color: #fff, fontSize: 13, lineHeight: 24, textAlign: center }, });拆开看这段代码只用到了三个组件却覆盖了大多数日常场景RowflexArr给表头的每一列分配不同的宽度占比flexArr的数值会同步给下面的单元格保证列对齐。TableWrapper它只负责包一层View不做任何布局干预非常适合手动摆单元格的场景。我们把每一行数据包进一个TableWrapper配合index % 2实现隔行变色。Cell传入 React 元素最后一个单元格的数据不是字符串而是一个按钮组件。Cell 内部做了判断遇到合法的 React 元素就直接渲染不会再套一层Text所以点击事件能正常触发。核心 API 速查表如果上面的例子让你对组件职责有了直观感受那这张属性表可以帮你把每个参数的作用彻底理清。属性适用组件作用说明默认值data全部组件表格数据二维数组的元素可以是文本或 React 元素nullstyle全部组件容器样式nullborderStyleTable / Cell边框配置格式为{ borderWidth, borderColor }{ borderWidth: 0, borderColor: #000 }textStyleRow / Rows / Col / Cols / Cell单元格内文字样式nullflexArrRow / Rows / Cols每列的 flex 值数组[]widthArrRow / Rows / Cols每列的固定宽度数组[]heightArrRows / Col / Cols每行的高度数组[]heightRow统一行高—widthCol整列宽度—flexCol整列 flex 值—cellTextStyleRow逐格文本样式函数签名(item) style—两条使用准则固定列宽用widthArr动态分配用flexArr多行批量渲染优先RowsheightArr单行定制优先Rowheight。进阶技巧与避坑清单这一节的内容大多来自源码实现读透它们能让你的表格开发少踩不少坑。1.borderStyle会自动下发ScrollView 除外。Table 在渲染子元素时会用React.cloneElement把borderStyle注入到每个直接子组件里TableWrapper也会继续向下传递。所以你只需要在 Table 上声明一次边框Row、Cell 就都继承到了。唯一的例外是 ScrollView——如果你把ScrollView放进 Table它不会收到边框配置这是为了不影响滚动容器本身的样式。2. 父元素不是 Table 时边框要自己声明。当你把TableWrapper、Cols等组件放在 ScrollView 或者其他自定义容器里脱离了 Table 的自动注入就必须手动补上borderStyle否则边框会神秘消失ScrollView horizontal{true} TableWrapper borderStyle{{ borderWidth: 2, borderColor: blue }} Cols data{data} / /TableWrapper /ScrollView3. 记住默认是没有边框的。从 1.2.1 版本开始borderWidth的默认值从 1 改成了 0。如果你发现表格光秃秃的不是 bug只是没传borderStyle。想要边框永远显式传一个。4. 单元格元素渲染是从 1.1.1 版本开始支持的。这个版本之前data里放组件会被当作字符串显示。升级后Cell 会先通过isValidElement检查是元素就直接渲染。想塞按钮、Badge、进度条放心塞。5.cellTextStyle可以逐格定制文本。这是 Row 独有的小彩蛋它是一个函数能根据当前单元格的数据返回不同的样式。比如想让某个数字超过阈值时变红一行代码就能实现不必逐格手写 Cell。6. Col 和 Cols 的单元格不支持自适应高度。这是官方明确提示的限制。纵向排布时每格高度完全由heightArr决定指望文字撑开行高是行不通的。横向的 Rows 没有这个问题。7. 内边距请用margin别用padding。给单元格做留白时在textStyle里设置margin值。用padding容易让文字背景和边框产生重叠视觉上出现压线的怪象。8. 注意拼写沿革。1.0.3 版本把TableWraper改成了TableWrapper如果你在旧代码或者老博客里看到前者记得替换组件库里已经没有那个名字了。9. 剩余 props 会一路透传到Text。Row 和 Cell 都会把未消费的 props 往下传最终落在单元格内部的 Text 上。这意味着numberOfLines、allowFontScaling这类文本属性可以直接写在 Row 上全局生效很省事。10. Table 自身也能横过来用。给 Table 的style加上flexDirection: row配合 TableWrapper 包裹左右两个区域就能实现左侧固定列 右侧滚动数据的分栏布局常见于复杂的报表页面。总结学习路线与源码阅读入口回到最初的问题React Native 里做表格难吗难的是自己从零拼装布局、对齐边框、处理交互。而 react-native-table-component 把这些脏活累活封装成了 7 个语义清晰的组件装包即可用数据驱动渲染还支持元素级定制。先用本文的成绩单跑通流程再基于员工信息表改造出自己的业务表格最后结合下面的源码把原理吃透你就能在数据展示这件事上彻底解放。想深入研究的同学推荐按这个顺序读源码index.js看全部导出components/table.js看 Table 的边框注入逻辑与 TableWrappercomponents/rows.js看 Row、Rows 如何拆分 flexArr 和 widthArrcomponents/cols.js看纵向排列的处理components/cell.js是最后一块拼图重点看isValidElement分支和默认flex: 1的判定utils/index.js里只有一个sum函数正是它算出 Rows 和 Cols 的容器宽高。整个项目清清爽爽读一遍等于给自己上完一节 React 组件设计课。【免费下载链接】react-native-table-componentBuild table for react native项目地址: https://gitcode.com/gh_mirrors/re/react-native-table-component创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表