前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >前端反卷计划-组件库-06-Icon组件开发

前端反卷计划-组件库-06-Icon组件开发

原创
作者头像
程序员库里
发布2023-11-27 09:56:05
2050
发布2023-11-27 09:56:05
举报
文章被收录于专栏:全栈学习全栈学习

Hi, 大家好!我是程序员库里。

今天开始分享如何从0搭建UI组件库。这也是前端反卷计划中的一项。

在接下来的日子,我会持续分享前端反卷计划中的每个知识点。

以下是前端反卷计划的内容:

目前这些内容持续更新到了我的 学习文档 中。感兴趣的欢迎一起学习!

1.安装fortawesome

icon组件的开发借助第三方开源库:fortawesome

1.安装fortawesome第三方库

代码语言:txt
复制
npm i @fortawesome/fontawesome-svg-core @fortawesome/free-solid-svg-icons @fortawesome/react-fontawesome --save

2.新建Icon目录

2.新建Icon目录,同其他组件

3.定义props

3.定义主题的props和icon的props

代码语言:txt
复制
import { FontAwesomeIconProps } from '@fortawesome/react-fontawesome';

export type ThemeProps = 'primary' | 'secondary' | 'success' | 'info' | 'warning' |

'danger' | 'light' | 'dark';

  


export interface IconProps extends FontAwesomeIconProps {

theme?: ThemeProps;

className?: string;

}

4.FontAwesomeIcon

代码语言:txt
复制
import { FontAwesomeIcon, FontAwesomeIconProps } from '@fortawesome/react-fontawesome';

5.把icon的className和主题的变量对上

6.使用FontAwesomeIcon组件来渲染,将class和其他本身的props带上

7.开始给icon增加color,但是color太多,我们这里使用scss提供的循环功能

首先在src/styles/_variables.scss增加theme-color变量

代码语言:txt
复制
$theme-colors: ( "primary": $primary, "secondary": $secondary, "success": $success, "info": $info, "warning": $warning, "danger": $danger, "light": $light, "dark": $dark );

然后使用each函数给icon不同的颜色赋值

代码语言:txt
复制
@each $key, $val in $theme-colors { .icon-#{$key} { color: $val; } }

最后在index.scss中增加icon

代码语言:txt
复制
@import "../components/Icon/style";

8.为了能使用icon的时候传入字符串,需要引入fontawesome的fas功能

代码语言:txt
复制
import { library } from '@fortawesome/fontawesome-svg-core' import { fas } from '@fortawesome/free-solid-svg-icons' library.add(fas)

9.整体代码:

代码语言:txt
复制
import React from 'react';

import classnames from 'classnames';

import { FontAwesomeIcon, FontAwesomeIconProps } from '@fortawesome/react-fontawesome';

import { library } from '@fortawesome/fontawesome-svg-core'

import { fas } from '@fortawesome/free-solid-svg-icons'

library.add(fas)

  


  


export type ThemeProps = 'primary' | 'secondary' | 'success' | 'info' | 'warning' |

'danger' | 'light' | 'dark';

  


export interface IconProps extends FontAwesomeIconProps {

theme?: ThemeProps;

className?: string;

}

  


const Icon: React.FC<IconProps> = (props) => {

const { className, theme, ...restProps } = props;

// icon-primary

const classes = classnames('curry-icon', className, {

[`icon-${theme}`]: theme

})

  


return (

<FontAwesomeIcon className={classes} {...restProps} />

)

}

  


export default Icon;

10.现在使用上面定义的icon组件,看下效果

代码语言:txt
复制
<Icon icon='coffee' theme="danger" size="10x" />

将theme换成primary看下效果

系列篇

前端反卷计划-组件库-01-环境搭建

前端反卷计划-组件库-02-storybook

前端反卷计划-组件库-03-组件样式

前端反卷计划-组件库-04-Button组件开发

# 前端反卷计划-组件库-05-Menu组件开发

持续更新

目前这些内容持续更新到了我的 学习文档 中。感兴趣的欢迎一起学习!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.安装fortawesome
  • 2.新建Icon目录
  • 3.定义props
  • 4.FontAwesomeIcon
  • 5.把icon的className和主题的变量对上
  • 6.使用FontAwesomeIcon组件来渲染,将class和其他本身的props带上
  • 7.开始给icon增加color,但是color太多,我们这里使用scss提供的循环功能
  • 8.为了能使用icon的时候传入字符串,需要引入fontawesome的fas功能
  • 9.整体代码:
  • 10.现在使用上面定义的icon组件,看下效果
  • 系列篇
  • 持续更新
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档