Я пытаюсь динамически загружать в компонент иконки реакции. Код выглядит так:
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;
Итак, мне нужно имя значка реакции в значке свойства и поместить строку в <MaterialDesign.MdHome />. MdHome будет строкой, указанной в значке свойства, например. MaterialDesign.{icon} поможет с этим сделать?
Мне пришлось изменить вопрос, моя вина, извините за это





Попробуй это:
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>
);
};
Я пробовал описанное выше, но значок не отображается. В инспекторе Chrome я вижу следующее: <span> <materialdesign.mdaccessibility> </ materialdesign.mdacc essibility> </span>
Извините, обновил ответ, используя обычные реквизиты.
Это работает путем замены <mdIcon /> на {React.createElement (mdIcon)}
Покажите нам код вашего
MdHome. Высокая вероятность, что вы не импортировалиMdHomeи пытаетесь его использовать.