React - отображение через массив изображений

Я создал объект с массивами внутри него, текстом и изображениями, и я хочу отобразить его, чтобы отобразить новый компонент, можно ли сопоставить такие изображения? Потому что мой новый компонент не обнаруживает никакого изображения, когда я пропускаю его через реквизит, и не знаю, делаю ли я что-то не так, или это просто невозможно.

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>

ОБНОВЛЕНО

Я должен быть без {} Теперь работает отлично :) Всем спасибо за помощь

Включите код списка проектов.

Sagar 25.08.2018 10:37
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
1
19 339
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

Структура объекта 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 отобразит на экране ошибку. Что было бы лучшим подходом в этом случае?

Taffarel Xavier 04.05.2020 03:55

Проблема в структуре данных ваших проектов. Он определяется как массив объектов, где ключ находится в массиве. Попробуйте скорректировать структуру вашего проекта.

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;

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