# React-Icons
**Repository Path**: kwooshung/React-Icons
## Basic Information
- **Project Name**: React-Icons
- **Description**: It is more convenient to use svg as React icon, which has strong operability and high degree of freedom.
- **Primary Language**: JavaScript
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-08-21
- **Last Updated**: 2025-01-06
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# @kwooshung/react-icons
## 更方便的使用 `svg` 作为 `React` 图标,可操作性强,自由度高。
[](LICENSE)







[](https://www.npmjs.com/package/@kwooshung/react-icons)
[](https://www.npmjs.com/package/@kwooshung/react-icons)
[](https://github.com/kwooshung/React-Icons/actions/)
[](https://codecov.io/gh/kwooshung/React-Icons)
[](https://codeclimate.com/github/kwooshung/React-Icons/maintainability)
[](https://gitee.com/kwooshung/React-Icons/)
English |
中文
# 为什么开发它?
- 所以我觉得,把图标使用组件直接引入到自己的项目中,是最适合我的方式。
- 因为现在的 **react网站**,都是只有首次加载时,才加载整页,路由切换时,也不会触发整页加载,一次性写到全局解构中,也不会有性能问题(毕竟,[IconFont](https://www.iconfont.cn/) 脚本的动态创建也是这样的流程)。
# 解决了什么痛点?
- 为什么不直接引入,自动生成图标?
- 因为我不喜欢这种引入方式,而且组件化功能不够强大灵活;
- 为什么不直接使用 [IconFont](https://www.iconfont.cn/) 引入 **script**?
- 我挺喜欢这种方式,但是每次还都要到官网管理图标很麻烦;
- 没有合适的图标,自己上传也很麻烦,特别审核机制很严格;比如我为了支持国际化,我需要上传中国国旗图标,但是审核机制不允许;
- 之前发生过,[IconFont](https://www.iconfont.cn/) 官网突然公告说要关闭cdn服务,虽然已生成的图标链接不受影响,但是修改图标库就不行了,得自己下载。后来过了段时间又开放了,这种不稳定性很让人担心;
- 标签,**svg** 结构,完全的控制权;
- 支持 **prefix** 前缀,方便管理;
# 为什么使用它?
- 支持自定义svg图标,你可以使用任何你喜欢的图标;
- 支持自定义加载条的样式,比如颜色、尺寸、旋转方向和旋转动画;
- 支持中英文双语注释;
- 学习成本低,使用简单且灵活;
- **ES6** 的现代特性实现;
- **TypeScript** 编写,类型安全;
- 可按需引入,**esm** 模块化,天生支持 **树摇(tree-shaking)**,不用担心打包后的体积;
- 当然本项目也提供了 **commonjs** 规范的 **cjs** 版本;
- 测试覆盖率 **100%**;
# 安装
## npm
```bash
npm install @kwooshung/react-icons
```
## yarn
```bash
yarn add @kwooshung/react-icons
```
## pnpm
```bash
pnpm add @kwooshung/react-icons
```
# 使用方法
## 样式
在某些框架中直接在全局`css` / `less` / `scss`中引入样式即可,如下所示:
```css
@import url('@kwooshung/react-icons/dist/index.css');
```
在部分框架中,如 `Next.js` 中,可能需要加入`~`符,才行,如下所示:
```css
@import url('~@kwooshung/react-icons/dist/index.css');
```
你也可以在全局页面,如 `Next.js` 中的 `Layout` 页面 或 对应组件 中引入,如下所示:
```tsx
import '@kwooshung/react-icons/dist/index.css';
```
## 组件
在某个全局组件中,比如 `Layout.tsx` 中引入,如下所示:
```tsx
import '@kwooshung/react-icons/dist/index.css';
import { IconProvider, Icon } from '@kwooshung/react-icons';
const icons = (
<>
>
);
const Demo = () => {
return (
);
};
export default Demo;
```
# API
## Props
以下用到的类型,请参考:[interfaces.d.ts](src/icons/interfaces.d.ts)
### IconProvider
### Props
| 参数 | 说明 | 类型 | 默认值 | 必须 |
| ------ | -------- | ------------- | ---------------- | ---- |
| icons | 图标组 | `JSX.Element` | `React.Fragment` | 是 |
| prefix | 图标前缀 | `string` | `''` | 否 |
### KsIcon
#### Props
| 参数 | 说明 | 类型 | 默认值 | 必须 |
| --------- | -------- | -------------------- | ------ | ---- |
| name | 名称 | `string` | - | 是 |
| id | ID | `string` | - | 否 |
| className | 类名 | `string` | - | 否 |
| size | 尺寸 | `number` | `0` | 否 |
| rotate | 旋转角度 | `number` | `0` | 否 |
| spin | 旋转动画 | `number`\| `boolean` | `0` | 否 |
#### 事件
| 事件 | 说明 | 类型 |
| ------------- | -------- | ---------------------------------------- |
| onClick | 点击事件 | `(e: MouseEvent) => void` |
| onDoubleClick | 双击事件 | `(e: MouseEvent) => void` |