动态加载反应图标到组件中

Ron*_*ers 4 reactjs

我正在尝试将 react-icons 动态加载到组件中。代码如下所示:

import React from 'react';
import styled from 'styled-components';
import PropTypes from 'prop-types';
import * as MaterialDesign from 'react-icons/md';

const styles = {
 default: {
  flexDirection: 'column',
  alignItems: 'center'
 },
 inline: {
  flexDirection: 'row'
 }
};

const StyledTabs = styled.button`
 display: flex;
 cursor: pointer;
 color: ${props => props.color};

 ${props => styles[props.type]}
`;

const Tabs = ({ icon, type, text, color }) => {
 return (
  <StyledTabs icon={icon} type={type} text={text} color={color}>
   <span>
    <MaterialDesign.MdHome />
   </span>
   <span>{text}</span>
  </StyledTabs>
 );
};

Tabs.propTypes = {
 /** Text of tab */
 text: PropTypes.string.isRequired,
 /** Text of tab */
 type: PropTypes.oneOf(['default', 'inline']),
 color: PropTypes.string,
 icon: PropTypes.string
};

Tabs.defaultProps = {
 type: 'default',
 color: '#000',
 icon: ''
};

/**
 * @component
*/
export default Tabs;
Run Code Online (Sandbox Code Playgroud)

所以我想要属性图标中的反应图标的名称,并将字符串放在<MaterialDesign.MdHome />MdHome 中将是属性图标中给出的字符串,例如有MaterialDesign.{icon}什么帮助完成这项工作吗?

vij*_*yst 11

尝试这个:

const Tabs = ({ icon, type, text, color }) => {
 const mdIcon = MaterialDesign[icon];
 return (
  <StyledTabs icon={icon} type={type} text={text} color={color}>
   <span>
    <mdIcon />
   </span>
   <span>{text}</span>
  </StyledTabs>
 );
};
Run Code Online (Sandbox Code Playgroud)

  • 它的工作原理是将 &lt;mdIcon /&gt; 替换为 {React.createElement(mdIcon)} (4认同)