用IconContext.Provider修改react-icons的icon样式

安装了react-icons后,引用的svg icon不能用className修改样式。需要使用IconContext.Provider

javascript 复制代码
<IconContext.Provider value={{ color: "green", attr: {fill: "#A68BFA", stroke: ""} }}>
	<FaHeart className="inline-block w-[20px] h-[20px]"/>
</IconContext.Provider>

value传参结构为:

javascript 复制代码
interface IconContext {

    color?: string;

    size?: string;

    className?: string;

    style?: React.CSSProperties;

    attr?: React.SVGAttributes<SVGElement>;

}

attr为:

javascript 复制代码
interface SVGAttributes<T> extends AriaAttributes, DOMAttributes<T> {

	// React-specific Attributes

	suppressHydrationWarning?: boolean | undefined;

	// Attributes which also defined in HTMLAttributes

	// See comment in SVGDOMPropertyConfig.js

	className?: string | undefined;

	color?: string | undefined;

	height?: number | string | undefined;

	id?: string | undefined;

	lang?: string | undefined;

	max?: number | string | undefined;

	media?: string | undefined;

	method?: string | undefined;

	min?: number | string | undefined;

	name?: string | undefined;

	style?: CSSProperties | undefined;

	target?: string | undefined;

	type?: string | undefined;

	width?: number | string | undefined;



	// Other HTML properties supported by SVG elements in browsers

	role?: AriaRole | undefined;

	tabIndex?: number | undefined;

	crossOrigin?: CrossOrigin;



	// SVG Specific attributes

	accentHeight?: number | string | undefined;

	accumulate?: "none" | "sum" | undefined;

	additive?: "replace" | "sum" | undefined;

	alignmentBaseline?:

		| "auto"

		| "baseline"

		| "before-edge"

		| "text-before-edge"

		| "middle"

		| "central"

		| "after-edge"

		| "text-after-edge"

		| "ideographic"

		| "alphabetic"

		| "hanging"

		| "mathematical"

		| "inherit"

		| undefined;

	allowReorder?: "no" | "yes" | undefined;

	alphabetic?: number | string | undefined;

	amplitude?: number | string | undefined;

	arabicForm?: "initial" | "medial" | "terminal" | "isolated" | undefined;

	ascent?: number | string | undefined;

	attributeName?: string | undefined;

	attributeType?: string | undefined;

	autoReverse?: Booleanish | undefined;

	azimuth?: number | string | undefined;

	baseFrequency?: number | string | undefined;

	baselineShift?: number | string | undefined;

	baseProfile?: number | string | undefined;

	bbox?: number | string | undefined;

	begin?: number | string | undefined;

	bias?: number | string | undefined;

	by?: number | string | undefined;

	calcMode?: number | string | undefined;

	capHeight?: number | string | undefined;

	clip?: number | string | undefined;

	clipPath?: string | undefined;

	clipPathUnits?: number | string | undefined;

	clipRule?: number | string | undefined;

	colorInterpolation?: number | string | undefined;

	colorInterpolationFilters?: "auto" | "sRGB" | "linearRGB" | "inherit" | undefined;

	colorProfile?: number | string | undefined;

	colorRendering?: number | string | undefined;

	contentScriptType?: number | string | undefined;

	contentStyleType?: number | string | undefined;

	cursor?: number | string | undefined;

	cx?: number | string | undefined;

	cy?: number | string | undefined;

	d?: string | undefined;

	decelerate?: number | string | undefined;

	descent?: number | string | undefined;

	diffuseConstant?: number | string | undefined;

	direction?: number | string | undefined;

	display?: number | string | undefined;

	divisor?: number | string | undefined;

	dominantBaseline?: number | string | undefined;

	dur?: number | string | undefined;

	dx?: number | string | undefined;

	dy?: number | string | undefined;

	edgeMode?: number | string | undefined;

	elevation?: number | string | undefined;

	enableBackground?: number | string | undefined;

	end?: number | string | undefined;

	exponent?: number | string | undefined;

	externalResourcesRequired?: Booleanish | undefined;

	fill?: string | undefined;

	fillOpacity?: number | string | undefined;

	fillRule?: "nonzero" | "evenodd" | "inherit" | undefined;

	filter?: string | undefined;

	filterRes?: number | string | undefined;

	filterUnits?: number | string | undefined;

	floodColor?: number | string | undefined;

	floodOpacity?: number | string | undefined;

	focusable?: Booleanish | "auto" | undefined;

	fontFamily?: string | undefined;

	fontSize?: number | string | undefined;

	fontSizeAdjust?: number | string | undefined;

	fontStretch?: number | string | undefined;

	fontStyle?: number | string | undefined;

	fontVariant?: number | string | undefined;

	fontWeight?: number | string | undefined;

	format?: number | string | undefined;

	fr?: number | string | undefined;

	from?: number | string | undefined;

	fx?: number | string | undefined;

	fy?: number | string | undefined;

	g1?: number | string | undefined;

	g2?: number | string | undefined;

	glyphName?: number | string | undefined;

	glyphOrientationHorizontal?: number | string | undefined;

	glyphOrientationVertical?: number | string | undefined;

	glyphRef?: number | string | undefined;

	gradientTransform?: string | undefined;

	gradientUnits?: string | undefined;

	hanging?: number | string | undefined;

	horizAdvX?: number | string | undefined;

	horizOriginX?: number | string | undefined;

	href?: string | undefined;

	ideographic?: number | string | undefined;

	imageRendering?: number | string | undefined;

	in2?: number | string | undefined;

	in?: string | undefined;

	intercept?: number | string | undefined;

	k1?: number | string | undefined;

	k2?: number | string | undefined;

	k3?: number | string | undefined;

	k4?: number | string | undefined;

	k?: number | string | undefined;

	kernelMatrix?: number | string | undefined;

	kernelUnitLength?: number | string | undefined;

	kerning?: number | string | undefined;

	keyPoints?: number | string | undefined;

	keySplines?: number | string | undefined;

	keyTimes?: number | string | undefined;

	lengthAdjust?: number | string | undefined;

	letterSpacing?: number | string | undefined;

	lightingColor?: number | string | undefined;

	limitingConeAngle?: number | string | undefined;

	local?: number | string | undefined;

	markerEnd?: string | undefined;

	markerHeight?: number | string | undefined;

	markerMid?: string | undefined;

	markerStart?: string | undefined;

	markerUnits?: number | string | undefined;

	markerWidth?: number | string | undefined;

	mask?: string | undefined;

	maskContentUnits?: number | string | undefined;

	maskUnits?: number | string | undefined;

	mathematical?: number | string | undefined;

	mode?: number | string | undefined;

	numOctaves?: number | string | undefined;

	offset?: number | string | undefined;

	opacity?: number | string | undefined;

	operator?: number | string | undefined;

	order?: number | string | undefined;

	orient?: number | string | undefined;

	orientation?: number | string | undefined;

	origin?: number | string | undefined;

	overflow?: number | string | undefined;

	overlinePosition?: number | string | undefined;

	overlineThickness?: number | string | undefined;

	paintOrder?: number | string | undefined;

	panose1?: number | string | undefined;

	path?: string | undefined;

	pathLength?: number | string | undefined;

	patternContentUnits?: string | undefined;

	patternTransform?: number | string | undefined;

	patternUnits?: string | undefined;

	pointerEvents?: number | string | undefined;

	points?: string | undefined;

	pointsAtX?: number | string | undefined;

	pointsAtY?: number | string | undefined;

	pointsAtZ?: number | string | undefined;

	preserveAlpha?: Booleanish | undefined;

	preserveAspectRatio?: string | undefined;

	primitiveUnits?: number | string | undefined;

	r?: number | string | undefined;

	radius?: number | string | undefined;

	refX?: number | string | undefined;

	refY?: number | string | undefined;

	renderingIntent?: number | string | undefined;

	repeatCount?: number | string | undefined;

	repeatDur?: number | string | undefined;

	requiredExtensions?: number | string | undefined;

	requiredFeatures?: number | string | undefined;

	restart?: number | string | undefined;

	result?: string | undefined;

	rotate?: number | string | undefined;

	rx?: number | string | undefined;

	ry?: number | string | undefined;

	scale?: number | string | undefined;

	seed?: number | string | undefined;

	shapeRendering?: number | string | undefined;

	slope?: number | string | undefined;

	spacing?: number | string | undefined;

	specularConstant?: number | string | undefined;

	specularExponent?: number | string | undefined;

	speed?: number | string | undefined;

	spreadMethod?: string | undefined;

	startOffset?: number | string | undefined;

	stdDeviation?: number | string | undefined;

	stemh?: number | string | undefined;

	stemv?: number | string | undefined;

	stitchTiles?: number | string | undefined;

	stopColor?: string | undefined;

	stopOpacity?: number | string | undefined;

	strikethroughPosition?: number | string | undefined;

	strikethroughThickness?: number | string | undefined;

	string?: number | string | undefined;

	stroke?: string | undefined;

	strokeDasharray?: string | number | undefined;

	strokeDashoffset?: string | number | undefined;

	strokeLinecap?: "butt" | "round" | "square" | "inherit" | undefined;

	strokeLinejoin?: "miter" | "round" | "bevel" | "inherit" | undefined;

	strokeMiterlimit?: number | string | undefined;

	strokeOpacity?: number | string | undefined;

	strokeWidth?: number | string | undefined;

	surfaceScale?: number | string | undefined;

	systemLanguage?: number | string | undefined;

	tableValues?: number | string | undefined;

	targetX?: number | string | undefined;

	targetY?: number | string | undefined;

	textAnchor?: string | undefined;

	textDecoration?: number | string | undefined;

	textLength?: number | string | undefined;

	textRendering?: number | string | undefined;

	to?: number | string | undefined;

	transform?: string | undefined;

	u1?: number | string | undefined;

	u2?: number | string | undefined;

	underlinePosition?: number | string | undefined;

	underlineThickness?: number | string | undefined;

	unicode?: number | string | undefined;

	unicodeBidi?: number | string | undefined;

	unicodeRange?: number | string | undefined;

	unitsPerEm?: number | string | undefined;

	vAlphabetic?: number | string | undefined;

	values?: string | undefined;

	vectorEffect?: number | string | undefined;

	version?: string | undefined;

	vertAdvY?: number | string | undefined;

	vertOriginX?: number | string | undefined;

	vertOriginY?: number | string | undefined;

	vHanging?: number | string | undefined;

	vIdeographic?: number | string | undefined;

	viewBox?: string | undefined;

	viewTarget?: number | string | undefined;

	visibility?: number | string | undefined;

	vMathematical?: number | string | undefined;

	widths?: number | string | undefined;

	wordSpacing?: number | string | undefined;

	writingMode?: number | string | undefined;

	x1?: number | string | undefined;

	x2?: number | string | undefined;

	x?: number | string | undefined;

	xChannelSelector?: string | undefined;

	xHeight?: number | string | undefined;

	xlinkActuate?: string | undefined;

	xlinkArcrole?: string | undefined;

	xlinkHref?: string | undefined;

	xlinkRole?: string | undefined;

	xlinkShow?: string | undefined;

	xlinkTitle?: string | undefined;

	xlinkType?: string | undefined;

	xmlBase?: string | undefined;

	xmlLang?: string | undefined;

	xmlns?: string | undefined;

	xmlnsXlink?: string | undefined;

	xmlSpace?: string | undefined;

	y1?: number | string | undefined;

	y2?: number | string | undefined;

	y?: number | string | undefined;

	yChannelSelector?: string | undefined;

	z?: number | string | undefined;

	zoomAndPan?: string | undefined;

}
相关推荐
程序员与背包客_CoderZ1 小时前
Node.js异步编程——Callback回调函数实现
前端·javascript·node.js·web
非凡ghost1 小时前
Pale Moon:速度优化的Firefox定制浏览器
前端·firefox
清灵xmf1 小时前
从 Set、Map 到 WeakSet、WeakMap 的进阶之旅
前端·javascript·set·map·weakset·weakmap
11054654012 小时前
11、参数化三维产品设计组件 - /设计与仿真组件/parametric-3d-product-design
前端·3d
爱笑的林羽2 小时前
Mac M系列 安装 jadx-gui
前端·macos
运维@小兵2 小时前
vue使用路由技术实现登录成功后跳转到首页
前端·javascript·vue.js
肠胃炎2 小时前
React构建组件
前端·javascript·react.js
邝邝邝邝丹2 小时前
React学习———React.memo、useMemo和useCallback
javascript·学习·react.js
酷爱码2 小时前
HTML5表格语法格式详解
前端·html·html5
hello_ejb32 小时前
聊聊JetCache的缓存构建
java·前端·缓存