Я создал объект с массивами внутри него, текстом и изображениями, и я хочу отобразить его, чтобы отобразить новый компонент, можно ли сопоставить такие изображения? Потому что мой новый компонент не обнаруживает никакого изображения, когда я пропускаю его через реквизит, и не знаю, делаю ли я что-то не так, или это просто невозможно.
import firstProjectPhoto from '../img/picOne.png';
import secondProjectPhoto from '../img/picTwo.png';
import thirdProjectPhoto from '../img/picThree.png';
import ListOfProjects from "./subcomponents/ListOfProjects";
const projects = [{
photo:[{firstProjectPhoto},{secondProjectPhoto},{thirdProjectPhoto}],
},
{
text:["Project number one", "Project number two", "Project number 3"],
}];
class Projects extends Component {
render() {
return (
<Grid className = "text-center" id = "listOfProjects">
<PageHeader className = "projects-header">My Projects</PageHeader>
{projects.map(e =>
<ListOfProjects
photo = {e.photo}
text = {e.text}
/>
)}
</Grid>
);
}
}
export default Projects;
новый компонент
class ListOfProjects extends Component {
render() {
return (
<Row className = "show-grid text-center projects-list">
<Col xs = {1} sm = {1} className = "projects">
<Image src = {this.props.photo} thumbnail responsive/>
<p>{this.props.text}</p>
</Col>
</Row>
);
}
}
export default ListOfProjects;
ОБНОВЛЕНО:
На самом деле есть некоторый прогресс, спасибо, ребята :) проблема была в структуре проекта const, однако он все же показывает img src как [объект Object] вместо обычного изображения
const projects = [{
photo: {firstProjectPhoto},
text:"first project"
},
{
photo: {secondProjectPhoto},
text:"second project"
},
{
photo: {thirdProjectPhoto},
text:"third project"
}
]
<Grid className = "text-center" id = "listOfProjects">
<PageHeader className = "projects-header">
My Projects </PageHeader>
{projects.map((e,i) =>
<ListOfProjects
photo = {e.photo}
text = {e.text}
key = {i}
/>
)}
</Grid>
ОБНОВЛЕНО
Я должен быть без {} Теперь работает отлично :) Всем спасибо за помощь



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Структура объекта projects не соответствует вашим ожиданиям. Ты хочешь
projects = [
{
photo: projectPhoto,
text: projectText
},
...
]
но у тебя есть
projects = [
{ photo: [...] },
{ text: [...] }
]
Вы также забыли добавить key к каждому элементу, отображаемому в цикле:
{projects.map((e, idx) =>
<ListOfProjects
photo = {e.photo}
text = {e.text}
key = {idx} // <-- here
/>
)}
В таком подходе есть ошибка. Если проекты пустые, response отобразит на экране ошибку. Что было бы лучшим подходом в этом случае?
Проблема в структуре данных ваших проектов. Он определяется как массив объектов, где ключ находится в массиве. Попробуйте скорректировать структуру вашего проекта.
const projects = [{
photo:'firstProjectPhoto':text:'Project number one'
},
{photo:'secondProjectPhoto':text:'Project number two'},
{photo:'thirdProjectPhoto',:text:'Project number three'}
];
Предположим, что вы хотите передать фиктивный код БД, следует сделать это следующим образом, даже если он не идеален, но для целей тестирования:
class Projects extends Component {
const projects = [
{
photo:firstProjectPhoto,
text: "Project number one"
},
{
photo:secondProjectPhoto,
text: "Project number two"
},
{
photo:thirdProjectPhoto,
text: "Project number three"
},
];
render() {
return (
<Grid className = "text-center" id = "listOfProjects">
<PageHeader className = "projects-header">My Projects</PageHeader>
{projects.map(e =>
<ListOfProjects
projects = {projects}
/>
)}
</Grid>
);
}
}
Рассмотрение вашей структуры данных JSON - это один из способов решения вашей проблемы. Но предоставленные вами данные json не рекомендуются. Каждое изображение должно иметь свое имя в одном и том же объекте.
class ListOfProjects extends Component {
render() {
let images = [];
const { photo, text } = this.props;
photo.map((p, i) => {
images.push(<Col xs = {1} sm = {1} className = "projects">);
images.push(<div key = {i}>
<Image src = {p} thumbnail responsive/>
<p>{text[i]}</p></div>
);
images.push(</Col>);
});
return (
<Row className = "show-grid text-center projects-list">
{images}
</Row>
);
}
}
export default ListOfProjects;
Включите код списка проектов.