Динамически загружать иконки в компонент

Я пытаюсь динамически загружать в компонент иконки реакции. Код выглядит так:

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} поможет с этим сделать?

Покажите нам код вашего MdHome. Высокая вероятность, что вы не импортировали MdHome и пытаетесь его использовать.

Isaac 01.12.2018 17:13

Мне пришлось изменить вопрос, моя вина, извините за это

Ronald Zwiers 01.12.2018 17:41
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
4
2
7 383
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуй это:

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>

Ronald Zwiers 01.12.2018 18:14

Извините, обновил ответ, используя обычные реквизиты.

vijayst 01.12.2018 18:24

Это работает путем замены <mdIcon /> на {React.createElement (mdIcon)}

Ronald Zwiers 01.12.2018 18:31

Другие вопросы по теме