import React, { useState, useEffect, FC } from "react"; import { Block, View } from "@tarojs/components"; import "./iconfont.scss"; import Taro from "@tarojs/taro"; import classnames from "classnames"; const SystemWidth = Taro.getSystemInfoSync().windowWidth const quot = '"' function hex2rgb(hex) { const rgb: number[] = []; hex = hex.substr(1); if (hex.length === 3) { hex = hex.replace(/(.)/g, "$1$1"); } hex.replace(/../g, function(color: string) { rgb.push(parseInt(color, 0x10)); return color; }); return "rgb(" + rgb.join(",") + ")"; } export type IconNames = 'icon-dianhua' | 'icon-rukou' | 'icon-renzhengchenggong' | 'icon-paixu' | 'icon-shaixuan' | 'icon-bodakehujingli' | 'icon-guanfangweixinkefu' | 'icon-tuijianbiaoqian' | 'icon-rukou' | 'icon-renzhengchenggong' | 'icon-wodekefu' | 'icon-yanseduibi' | 'icon-dizhiguanli' | 'icon-weixin' | 'icon-riqi' | 'icon-shuru' | 'icon-a-0tianzhangqi' | 'icon-huodaofukuan' | 'icon-huozhuziti' | 'icon-saomazhifu' | 'icon-xianxiahuikuan' | 'icon-yufukuan' | 'icon-xinzengshoucangjia' | 'icon-qingchusousuo' | 'icon-xuanzechenggong' | 'icon-gongnengtubiao-saomiao' | 'icon-bianjizidingyimadan' | 'icon-zidingyimadanyulan' | 'icon-yuanshimadanyulan' | 'icon-xiala' | 'icon-shangla' | 'icon-qingchuxinxi' | 'icon-sousuo' | 'icon-guanli' | 'icon-bianji' | 'icon-shoucangjia' | 'icon-shezhi' | 'icon-tishi' | 'icon-erweima' | 'icon-dianjishoucang' | 'icon-gouwuche' | 'icon-shoucangchenggong' | 'icon-fenxiangshangpin' | 'icon-kefu' | 'icon-xinzenganniu' | 'icon-jianshaoanniu' | 'icon-daifahuo2' | 'icon-daishouhuo2' | 'icon-tuikuan-shouhou' | 'icon-daipeibu2' | 'icon-daifukuan2'; type PropsType = { name: IconNames; size?: number; color?: string | string[]; customStyle?: React.CSSProperties; customClassName?: string; }; const IconFont:FC = ({ name, size = 18, color, customStyle = {}, customClassName = "" }) => { const [colors, setColors] = useState() const [isStr, setIsStr] = useState(true) const [svgSize, setSvgSize] = useState(() => (size / 750) * SystemWidth) useEffect(() => { setIsStr(typeof color === 'string') if (typeof color === 'string') { setColors(color.indexOf('#') === 0 ? hex2rgb(color) : color) } else { setColors( color?.map(function (item) { return item.indexOf('#') === 0 ? hex2rgb(item) : item }) ) } return () => {} }, [color]) useEffect(() => { setSvgSize((size / 750) * SystemWidth) }, [size]) // 也可以使用 if (name === 'xxx') { return } 来渲染,但是测试发现在ios下会有问题,报错 Maximum call stack啥的。下面这个写法没问题 return ( {/* icon-alipay */} {/* {name === "icon-alipay" && ( )} */} {/* icon-dianhua */} { name === 'icon-dianhua' && () } {/* icon-paixu */} >>>>>>> f0abc88 (✨ feat(ID1000800浮窗提示客户经理电话完成):) { name === 'icon-paixu' && () } {/* icon-shaixuan */} { name === 'icon-shaixuan' && () } {/* icon-bodakehujingli */} { name === 'icon-bodakehujingli' && () } {/* icon-guanfangweixinkefu */} { name === 'icon-guanfangweixinkefu' && () } {/* icon-tuijianbiaoqian */} { name === 'icon-tuijianbiaoqian' && () } {/* icon-rukou */} { name === 'icon-rukou' && () } {/* icon-renzhengchenggong */} { name === 'icon-renzhengchenggong' && () } {/* icon-wodekefu */} { name === 'icon-wodekefu' && () } {/* icon-yanseduibi */} { name === 'icon-yanseduibi' && () } {/* icon-dizhiguanli */} { name === 'icon-dizhiguanli' && () } {/* icon-weixin */} { name === 'icon-weixin' && () } {/* icon-riqi */} { name === 'icon-riqi' && () } {/* icon-shuru */} { name === 'icon-shuru' && () } {/* icon-a-0tianzhangqi */} { name === 'icon-a-0tianzhangqi' && () } {/* icon-huodaofukuan */} { name === 'icon-huodaofukuan' && () } {/* icon-huozhuziti */} { name === 'icon-huozhuziti' && () } {/* icon-saomazhifu */} { name === 'icon-saomazhifu' && () } {/* icon-xianxiahuikuan */} { name === 'icon-xianxiahuikuan' && () } {/* icon-yufukuan */} { name === 'icon-yufukuan' && () } {/* icon-xinzengshoucangjia */} { name === 'icon-xinzengshoucangjia' && () } {/* icon-qingchusousuo */} { name === 'icon-qingchusousuo' && () } {/* icon-xuanzechenggong */} { name === 'icon-xuanzechenggong' && () } {/* icon-gongnengtubiao-saomiao */} { name === 'icon-gongnengtubiao-saomiao' && () } {/* icon-bianjizidingyimadan */} { name === 'icon-bianjizidingyimadan' && () } {/* icon-zidingyimadanyulan */} { name === 'icon-zidingyimadanyulan' && () } {/* icon-yuanshimadanyulan */} { name === 'icon-yuanshimadanyulan' && () } {/* icon-xiala */} { name === 'icon-xiala' && () } {/* icon-shangla */} { name === 'icon-shangla' && () } {/* icon-qingchuxinxi */} { name === 'icon-qingchuxinxi' && () } {/* icon-sousuo */} { name === 'icon-sousuo' && () } {/* icon-guanli */} { name === 'icon-guanli' && () } {/* icon-bianji */} { name === 'icon-bianji' && () } {/* icon-shoucangjia */} { name === 'icon-shoucangjia' && () } {/* icon-shezhi */} { name === 'icon-shezhi' && () } {/* icon-tishi */} { name === 'icon-tishi' && () } {/* icon-erweima */} { name === 'icon-erweima' && () } {/* icon-dianjishoucang */} { name === 'icon-dianjishoucang' && () } {/* icon-gouwuche */} { name === 'icon-gouwuche' && () } {/* icon-shoucangchenggong */} { name === 'icon-shoucangchenggong' && () } {/* icon-fenxiangshangpin */} { name === 'icon-fenxiangshangpin' && () } {/* icon-kefu */} { name === 'icon-kefu' && () } {/* icon-xinzenganniu */} { name === 'icon-xinzenganniu' && () } {/* icon-jianshaoanniu */} { name === 'icon-jianshaoanniu' && () } {/* icon-daifahuo2 */} { name === 'icon-daifahuo2' && () } {/* icon-daishouhuo2 */} { name === 'icon-daishouhuo2' && () } {/* icon-tuikuan-shouhou */} { name === 'icon-tuikuan-shouhou' && () } {/* icon-daipeibu2 */} { name === 'icon-daipeibu2' && () } {/* icon-daifukuan2 */} { name === 'icon-daifukuan2' && () } ) } export default IconFont