react-native-vector-icons
React Native 生态最成熟的图标组件库,集成 8 大主流图标集、数万个矢量图标,支持全样式
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
React Native 生态最成熟的图标组件库,集成 8 大主流图标集、数万个矢量图标,支持全样式
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
图1:React Native Vector Icons 项目封面
你正在开发一款 React Native 社交 App,需要在导航栏放一个「消息」图标,在底部 Tab 栏放「首页」「发现」「我的」三个图标,还要给点赞按钮配一个心形图标——这些图标需要颜色可调、大小可改、能绑击事件。去找设计师一个一个出图?不,你需要的是一个图标组件库。
React Native Vector Icons(RNVI)正是来解决这个问题的:它是一个包含 8 大主流图标集、数万个图标 的 React Native 组件库,支持全功能样式定制,一行代码即可集成到任何 React Native 项目中。截至 2026 年初,该项目在 GitHub 累计获得 超过 17,000 颗星,是 React Native 生态中历史最悠久、覆盖面最广的图标解决方案之一。
React Native Vector Icons 最早由瑞典开发者 Joel Arvidsson(GitHub @oblador)于 2015 年创建,是 React Native 生态系统最早期的开源项目之一。
彼时 React Native 刚开源不久,生态极为匮乏,开发者面临的最大痛点之一就是:原生 iOS/Android 系统图标不能直接用在 React Native 里,而位图图标在高清屏幕上一放大就模糊。RNVI 的解法很聪明:把字体图标(Font-based icons)引入 React Native。字体图标本质上是把矢量图形编码进字体文件中,放大缩小都不失真,而且像文字一样可以用样式属性控制颜色、大小、阴影。Joel 把各大知名图标集(FontAwesome、Material Icons、Ionicons 等)打包成 React Native 可以直接引用的字体组件,一举解决了开发者的核心痛点。
2024 年,项目迎来了重大架构升级:从单一巨型包(react-native-vector-icons)演进为 package-per-icon-set(每个图标集独立包) 的现代化 monorepo 结构,解决了依赖体积大、更新不同步的老问题。
RNVI 整合了业界最主流的图标集,用户可以根据项目风格自由选择,不必为了统一图标风格而放弃喜欢的图标集。
| 图标集 | 来源 | 图标数量 | 维护状态 |
|---|---|---|---|
| FontAwesome | Fonticons, Inc. | 2,806 免费 + 75,767 Pro | 活跃维护(v7.2.0) |
| Material Design Icons | Pictogrammers | 7,448 | 活跃维护(v7.4.47) |
| Ionicons | Ionic | 1,357 | 活跃维护(v8.0.9) |
| Lucide | Lucide 社区 | 1,941 | 活跃维护(v1.7.0) |
| Ant Design | 蚂蚁集团 | 449 | 活跃维护(v4.4.2) |
| Feather | Cole Bemis | 287 | 活跃维护(v4.29.2) |
| Material Icons | 2,234 | 上游已停止维护 | |
| Octicons | GitHub | 370 | 上游已停止维护 |
| Foundation / Entypo / FontAwesome 4/5/6 / Fontisto / SimpleLineIcons / Zocial | 各上游 | 数百至数千 | 上游已停止维护 |
这种「超市货架」模式让开发者可以像点菜一样挑选图标集:喜欢 Material Design 风格就装 @react-native-vector-icons/material-icons,喜欢 FontAwesome 就装 @react-native-vector-icons/fontawesome-free-solid,不再需要为整个图标库买单。
新版 RNVI 采用了 Nx monorepo 作为项目结构模板,主分支为 master。项目包含 40+ 个子包,主要分为以下几类:
图标集包(如 @react-native-vector-icons/fontawesome-free-solid):每个图标集独立发布为 npm 包,包含三个核心子目录:fonts/(字体文件)、glyphmaps/(图标名到 Unicode 编码映射的 JSON 文件)、src/(React Native TypeScript 组件源码)。开发者使用时通过 React 组件引用图标,底层通过 react-native.Text 的 fontFamily 属性加载字体并渲染对应 Unicode 字符。
公共包(@react-native-vector-icons/common):定义所有图标集的共享接口和工具函数,包括动态字体加载机制、样式合并逻辑等。common 包是整个生态的基石,其他所有图标集包都依赖它。
生成器包(generator-react-native-vector-icons):基于 Yeoman 的脚手架工具,开发者可以将 Fontello、Icomoon 等自定义字体文件导入,生成对应的自定义图标集包。这使得 RNVI 不仅是一个图标消费者,也是一个图标生产平台。
应用示例(apps/directory、apps/icon-explorer):在线图标目录(部署于 GitHub Pages)和本地图标浏览器,帮助开发者在引入项目前预览和搜索图标。
技术栈方面,项目使用 TypeScript 作为主要开发语言(134 个 .ts/.tsx 文件),构建工具链为 Nx + pnpm + Biome(代码格式/检查)+ Vitest(测试),Node.js 最低版本要求 22.0.0,代码规范使用 biome.jsonc 和 knip.jsonc 做静态分析和 lint。
RNVI 的使用方式极为简洁,核心就是一个 <Icon> 组件。以下是几个典型用法:
import Icon from '@react-native-vector-icons/fontawesome-free-solid';
// 基础用法:名称 + 尺寸 + 颜色
<Icon name="home" size={24} color="#333" />
// 带样式:阴影、旋转
<Icon name="cog" size={32} color="#666" style={{ shadowOffset: { width: 1, height: 1 }, shadowOpacity: 0.5 }} />
// 带点击事件
<Icon name="heart" size={20} color="red" onPress={() => like()} />
除了静态图标,RNVI 还支持 动画图标(通过 react-native-vector-icons/animation)和 动态字体加载(在字体未完全加载前显示降级方案),这两项能力让它在生产环境中的体验更加健壮。
RNVI 本身不是独立应用,而是一个 npm 包,集成到 React Native 项目中。安装过程分两步:
安装图标集包(以 FontAwesome 为例):
npm install @react-native-vector-icons/fontawesome-free-solid
平台配置:根据目标平台(iOS/Android/Expo/Web),运行对应的字体链接脚本(React Native)或配置 expo-font(Expo)。官方提供了 Expo、React Native CLI、Web 三份详细安装指南,覆盖了主流使用场景。
整个安装过程在有 React Native 项目基础的情况下,熟练开发者约 2 分钟 即可完成。新手需要约 5-10 分钟阅读对应平台的安装文档。
优势方面:
局限性方面:
react-native-vector-image 项目支持 SVG,但 RNVI 主体仍是字体图标方案,在某些高级图形场景下不如 SVG 灵活RNVI 的存在意义远超一个图标库本身。它是 React Native 生态从「能用」走向「好用」的一个缩影。在 RNVI 出现之前,React Native 开发者需要自己处理字体文件加载、Android/iOS 字体路径差异、图标渲染不一致等一系列底层问题。RNVI 把这些复杂性封装干净了,让开发者专注业务逻辑。
从趋势看,图标库领域正在经历两个方向的分化:一是以 Lucide 为代表的开源 SVG 图标集(RNVI 也在积极跟进 Lucide),二是以 FontAwesome Pro 为代表的商业图标生态。RNVI 的 monorepo 升级让它可以同时拥抱两个方向,保持了技术上的灵活性。
对于想要为 React Native 项目找到稳定图标解决方案的开发者来说,RNVI 仍然是目前最成熟、覆盖面最广的选择——10 年的社区积累、Nx monorepo 的现代化架构、以及对主流图标集的全覆盖,共同构建了一个值得信赖的工具链基础设施。