#javascript #reactjs #icons
#javascript #reactjs #Значки
Вопрос:
У меня есть файл js с массивом объектов, я пытаюсь динамически загружать атрибуты с помощью компонента, и, похоже, я не могу понять, как передать значки компоненту рендеринга.
Вот компонент, который я использую для отображения данных:
import React, { Component } from 'react';
import SkillData from '../../store/skillData';
import './SkillsCard.css';
class SkillsCard extends Component {
state = { }
renderSkills = () =>
SkillData.map((skill, _id) =>
<div key={_id} className="skillCard col-sm-3 m-2">
<div className="top">
{/* ***line in question*** */}
<div className="icon">{skill.icon}</div>
<h5>{skill.title}</h5>
</div>
<div className="bottom">
{skill.techs.map((tech,index)=>(
<div className='skillCardList' key={index}> {tech}</div>
))}
</div>
</div>
);
render() {
return (
this.renderSkills()
);
}
}
export default SkillsCard;
и вот файл, из которого я извлекаю данные:
const SkillData = [
{
_id: '1',
icon: '../../assets/icons/frontend.png',
title: 'Front End',
techs: ['HTML5', 'CSS | SCSS', 'JavaScript', 'React | Redux', 'Angular']
},
{
_id: '2',
icon: '../../assets/icons/server.png',
title: 'Back End',
techs: ['NodeJS', 'Express', 'Postman', 'Authentication | Authorization']
},
{
_id: '3',
icon: '../../assets/icons/database.png',
title: 'Databases',
techs: ['MongoDB', 'mySQL', 'PostgreSQL']
}
]
export default SkillData
Проблема, с которой я сталкиваюсь, заключается в том, что я не могу получить имя пути к значкам для оценки и фактического отображения значка; Вместо этого мой компонент отображает текст, указанный в пути. Все остальные атрибуты отображаются просто отлично! Есть какие-нибудь мысли?
Комментарии:
1. Это потому, что вы вводите фактический путь к значку в тег div, в теге div создайте тег img и сделайте его src
{skill.icon}
Ответ №1:
Потому что вы просто отображаете строковое значение на странице:
<div className="icon">{skill.icon}</div>
Вы имели в виду использовать <img>
элемент?:
<div className="icon">
<img src={skill.icon} />
</div>
Комментарии:
1. @WesHampton: Что вы подразумеваете под «путь не вычисляется»? В вопросе звучало так, как будто путь был успешно отображен в виде текста, и вам просто нужно было, чтобы это было изображение. Не могли бы вы пояснить?
Ответ №2:
Это сработало, когда я добавил
const icons = require.context('../assets/icons', true);
в SKillData.js файл и задайте пути к:
icons('./iconName.png'),
Миллион благодарностей, Дэвид!
Ответ №3:
У меня это работает.
Прямой запрос из вашей локальной папки assets, поэтому вам не нужно усложнять импорт заголовка file ссылкой из запроса файла json
{/* line in question */}
<div className="icon">
<img src={require(`${skill.icon}`)} />
</div>