如何解决按名称从react-icons获取图标
我正在创建一个私有的React组件库,并且希望通过简单提供名称(无论如何已经由iconType作为前缀)来使用react-icons中的任何图标。所以我创建了以下组件:
import React,{ useEffect } from 'react';
import PropTypes from 'prop-types';
import { IconContext } from 'react-icons';
export const Icon = ({name,style}) => {
let IconElement = null;
const setIcon = (name) => {
const iconType = name.match(/(^.[a-z]+)/)[0];
try {
IconElement = require(`react-icons/${iconType.toLowerCase()}/`)[name] || null;
} catch(e) {
console.error(e);
}
}
useEffect(() => {
if (name) setIcon(name);
},[name]);
return (
<IconContext.Provider value={{ style }}>
<div>hi
{IconElement}
</div>
</IconContext.Provider>
);
};
Icon.propTypes = {
name: PropTypes.string.isrequired,style: PropTypes.shape({
fontSize: PropTypes.string,color: PropTypes.string,}),};
Icon.defaultProps = {
name: 'FaChessBoard',};
但是在我的故事书中这样称呼时:
import React from 'react';
import { Icon } from './Icon';
export default {
title: 'Example/Icon',component: Icon,};
const Template = (args) => <Icon {...args} />;
export const Default = Template.bind({});
Default.args = {
name: ''
};
export const MaterialDesignIcons = Template.bind({});
MaterialDesignIcons.args = {
name: 'MdInsertComment'
};
export const FontAwesomeIcons = Template.bind({});
FontAwesomeIcons.args = {
name: 'FaAddressCard'
};
它没有被渲染。有什么想法吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。