ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

react-native-elements Badge 组件完全指南:数值徽标、Mini 状态点与 withBadge HOC 实战

react-native-elements Badge 组件完全指南:数值徽标、Mini 状态点与 withBadge HOC 实战 UI组件移动开发前端【免费下载链接】react-native-elementsCross-Platform React Native UI Toolkit项目地址https://gitcode.com/gh_mirrors/re/react-native-elements点击查看免费下载Badge 是 React Native Elements 中用于向用户传达数值或条目状态的小型组件本文以 version-2.3.2/badge.md 文档为骨架结合仓库内packages/base/src/Badge/的源码实现与测试用例系统讲解标准徽标、Mini 状态点、withBadge 高阶组件的全部 Props、定位参数与底层渲染原理。读完本文你将能够在消息列表、购物车、头像与图标上快速构建带角标的状态指示方案。Standard标准徽标Mini Badge状态点Badge as Indicator作为指示器一、Badge 是什么何时使用Badge 是典型用于向用户传达数值如未读消息数 99或条目状态如在线、离线的小型组件。在 React Native Elements 中它由三个导出成员组成Badge基础组件本身withBadge高阶组件HOC用于给任意组件图标、按钮等快捷附加角标BadgeProps类型定义供 TypeScript 用户扩展。三者均从 packages/base/src/Badge/index.tsx 导出并在 packages/themed/src/Badge/index.tsx 中通过withTheme包装后作为主题化组件对外使用。二、安装与导入从react-native-elements或rneui/themed导入import { Text, View } from react-native; import { Avatar, Badge, Icon, withBadge } from react-native-elements;当前仓库示例应用 example/src/views/badge.tsx 中使用的则是rneui/themed导入路径二者导出同名 API。三、标准徽标Standard Badge标准徽标通过value展示文本字符串或数字通过status控制背景色Badge value99 statuserror / Badge value{TextMy Custom Badge/Text} /value的类型非常灵活字符串、数字或任意 React Native 组件均可。当传入 React 组件时Badge.tsx 内部会调用renderNode(Text, value, {...})把它渲染到徽标内部——renderNode是仓库 packages/base/src/helpers/renderNode.tsx 提供的通用节点渲染工具会自动把字符串包装成Text、把元素直接复用、把组件实例化并在未传任何值时返回null这正是 Mini Badge 的触发条件。status可取四个枚举值primary、success、warning、error默认primary。在源码中背景色取自已注入的主题backgroundColor: theme?.colors?.[status],也就是说颜色并非写死的常量而是跟随主题色板lightColors/darkColors动态解析这在 packages/base/src/Badge/tests/Badge.test.tsx 的 Mini badge 用例中得到验证测试逐一断言四种status渲染出的背景色与lightColors[status]完全一致。四、Mini Badge不带 value 的状态点当不提供value属性时Badge 自动退化为更小的圆点形态适合表达在线/离线/有通知等纯状态语义Badge statussuccess / Badge statuserror / Badge statusprimary / Badge statuswarning /两种形态的尺寸差异在源码中定义得很明确Badge.tsx形态尺寸常量实际尺寸触发条件标准徽标size 18最小宽度/高度 18圆角18 / 2存在value渲染结果Mini BadgeminiSize 8最小宽度/高度 8圆角8 / 2renderNode返回null具体逻辑为{!element styles.miniBadge}即value为空时额外套用styles.miniBadge去除水平/垂直内边距并缩小到 8×8。五、Badge as Indicator叠加到头像与任意元素上将 Badge 与containerStyle中的绝对定位结合即可让它挂在任意组件角落作为指示器。官方示例View Avatar rounded source{{ uri: https://randomuser.me/api/portraits/men/41.jpg }} sizelarge / Badge statussuccess containerStyle{{ position: absolute, top: -4, right: -4 }} / /View这里的关键是理解 Badge 的 DOM 结构外层是containerStyle作用的外壳ViewtestID 为RNE__Badge__Container内层才是badgeStyle作用的徽标本体。因此containerStyle负责外部布局绝对定位、偏移、与宿主元素的相对关系badgeStyle负责徽标本体视觉背景色、尺寸、圆角。在 example/src/views/badge.tsx 中同一个思路还被用于头像叠加value{10}的数字角标以及配合withBadge生成带数字的图标。六、withBadge 高阶组件一键给图标/按钮加角标withBadge让你无需手写绝对定位直接包装任意组件即可获得角标const BadgedIcon withBadge(1)(Icon); BadgedIcon typeionicon nameios-chatbubbles /它同样支持函数形式的 value——函数接收被包装组件的props作为参数返回值作为徽标内容非常适合从 Redux 等状态容器动态计算未读数量// 使用装饰器提案babel-plugin-transform-decorators-legacy connect(state ({ notifications: state.notifications, })) withBadge(props props.notifications.length) export default class MyDecoratedIcon extends React.Component { render() { return ( Icon typeionicon namemd-cart / ); } }withBadge的签名与实现位于 packages/base/src/Badge/withBadge.tsxwithBadge(value, options)(WrappedComponent)其内部做了四件关键工作解构定位参数bottom、left、right、top、hidden、containerStyle从options中取出其余字段全部作为BadgeProps透传给内部Badge按形态切换默认偏移当存在value时默认right -16、top -1当value为空Mini 形态时自动改为right -3、top 3使小圆点贴合宿主元素右上角动态求值const badgeValue typeof value function ? value(props) : value;条件渲染hidden为true时不渲染徽标但保留被包装组件。此外它还会生成可读的显示名WithBadge(Icon)这样的displayName基于WrappedComponent.displayName || WrappedComponent.name便于调试与 React DevTools 排查。withBadge 的 options 参数参数类型默认值说明bottomnumber可选undefined徽标距底部的偏移leftnumber可选undefined徽标距左侧的偏移rightnumber可选-16Mini 形态为-3徽标距右侧的偏移topnumber可选-1Mini 形态为3徽标距顶部的偏移hiddenboolean可选false为true时隐藏徽标containerStyleView style可选内部样式附加到徽标外层容器options同时接收 [Badge 的全部 Props](#badge 组件 Props 全表)见 website/versioned_docs/version-2.3.2/badge.md#props。例如自定义偏移与显式 value 的写法const BadgedComponent withBadge(1, { top: 0, bottom: 5 })(TouchableOpacity);这正是 packages/themed/src/Badge/tests/withBadge.test.tsx 中验证的场景测试断言最终渲染出的RNE__Badge__Container样式对象包含top: 0与bottom: 5确认 options 的定位参数被正确应用。七、Badge 组件 Props 全表badgeStyle附加到徽标背景视图的样式可选。类型默认值View style对象内部样式containerStyle外层容器的样式可选常用于绝对定位角标。类型默认值View style对象内部样式onPress点击徽标时触发的回调函数。类型默认值function无status决定指示点的颜色。类型默认值primary、success、warning、errorprimarytextProps透传给内部Text组件的额外属性可选如testID、numberOfLines等。类型默认值Text props对象无textStyle徽标内文本的额外样式可选。内部默认文本样式为fontSize: 12、color: white、paddingHorizontal: 4传入的textStyle会与之合并。类型默认值Text style对象内部样式value徽标显示的内容缺省时呈现 Mini 形态。类型默认值String / Number / React Native Component无Component用于替换徽标外层组件的自定义组件。类型默认值React Native ComponentView若传入onPress等按压回调则自动切换为可点击组件需要说明当前仓库源码Badge.tsx中该默认值已演进为——Component onPress || onLongPress || onPressIn || onPressOut ? Pressable : View,即同时监听onPress、onLongPress、onPressIn、onPressOut四个按压回调中的任意一个就会把默认外壳从View切换为 React Native 的Pressable。早期 2.3.x 文档描述的默认值为TouchableOpacity实际以你安装版本对应的源码为准。自定义组件示例Badge value{10} Component{TouchableWithoutFeedback} /对应测试见 packages/base/src/Badge/tests/Badge.test.tsx。八、源码实现细节从渲染到测试8.1 内部结构Badge 采用容器 徽标两层结构Badge.tsx外层ViewtestIDRNE__Badge__Container应用containerStyle内层ComponenttestIDRNE__Badge应用内联基础样式alignSelf: center、minWidth: size、height: size、borderRadius: size / 2、主题背景色、白色 hairline 边框后再合并badgeStyle。8.2 按压交互传递onPress后组件变为可点击测试用例 Badge.test.tsx 通过fireEvent.press断言回调被调用一次验证了交互链路可用。8.3 主题化封装rneui/themed的 Badge 通过withThemeBadgeProps(Badge, Badge)接入全局主题系统packages/themed/src/Badge/index.tsx因此status颜色会随应用主题浅色/深色自动切换。8.4 完整实战示例仓库示例应用 example/src/views/badge.tsx 一次性覆盖了本文全部三种形态一行value3等数字徽标、一行无value的四色 Mini 点、以及头像 角标 BadgedIcon的组合布局可直接作为复制起点运行查看效果。九、总结围绕 version-2.3.2/badge.md 的核心能力可以总结出三条实践准则表达数量用标准徽标给value传字符串/数字/组件用status选择语义色表达状态用 Mini Badge不给value组件自动缩为 8×8 状态点配合containerStyle绝对定位即可叠加到头像、列表项等任意宿主上批量接入用 withBadge静态值、基于 props 的函数值、hidden开关与四向偏移top/left/right/bottom覆盖了绝大多数角标需求还能与装饰器语法、Reduxconnect组合使用。相关源码与测试文件组件实现 packages/base/src/Badge/Badge.tsx、HOC 实现 packages/base/src/Badge/withBadge.tsx、单元测试 packages/base/src/Badge/tests/Badge.test.tsx、示例页面 example/src/views/badge.tsx。赞分享UI组件移动开发前端【免费下载链接】react-native-elementsCross-Platform React Native UI Toolkit项目地址https://gitcode.com/gh_mirrors/re/react-native-elements点击查看免费下载相关推荐如何用ok-ww实现《鸣潮》全自动化新手终极指南如何用ok ww实现《鸣潮》全自动化新手终极指南 想象一下这样的场景忙碌的工作日晚上你刚刚结束一天的工作身心疲惫地坐在电脑前看着《鸣潮》中堆积如山的日UI组件移动开发前端tldr-pages仪表盘可视化监控界面tldr pages仪表盘可视化监控界面 tldr pages作为一个社区维护的命令行工具速查手册项目拥有海量的命令示例和多语言支持。为了更好地监控项目状态UI组件移动开发前端KoELECTRA-small-v3-modu-ner应用场景大全从新闻分析到智能客服的5个实用方向KoELECTRA small v3 modu ner应用场景大全从新闻分析到智能客服的5个实用方向 KoELECTRA small v3 modu ner是上一篇两个 ZIP、两次重启KernelSU 装 LSPosed 与 Xposed 模块的完整实战下一篇Apktool资源解码测试DecodeResourcesTest资源处理核心创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表