Как вернуть html-элемент из объекта

#reactjs

Вопрос:

Я создал функцию, которая возвращает мне нарисованную фотографию. Я пытаюсь назначить его в качестве URL-адреса img, но вместо html-элемента он возвращает мне объект. Как я могу ссылаться на html-элемент вместо объекта?

Это функция, которая возвращает мне изображение:

 function workoutImage() {
  const images = [
    {
      img1: "./images/workout-image1.jpg",
    },
    {
      img2: "./images/workout-image2.jpg",
    },
    {
      img3: "./images/workout-image3.jpg",
    },
  ];

  const imageIndex = Math.floor(Math.random() * images.length);
  let returnImage = images[imageIndex];

  return returnImage;
}

export default workoutImage;
 

и вот компонент, в котором я пытаюсь его отобразить:

 function WorkoutsDiary() {

  let workoutImage = workoutImageDraw();

  return (
    <Container>
      <Content>
        {showWorkouts amp;amp;
          showWorkouts.map((workout, key) => (
            <Image key={key}>
              <Link to={`/exercise/`   workout.id}>
                <img src={workoutImage} alt="" />
              </Link>
            </Image>
          ))}
      </Content>
    </Container>
  );
}
 

когда я веду журнал консоли, он выглядит так:

введите описание изображения здесь

Ответ №1:

Этот:

 return returnImage;
 

возвращает экземпляр объекта. Например, это:

 {
  img1: "./images/workout-image1.jpg",
}
 

Если вы просто хотите, чтобы он вернул свойство string для этого объекта, верните это свойство:

 return returnImage.img1;
 

В качестве альтернативы, если вы хотите вернуть весь объект целиком, просто используйте его строковое свойство в значении атрибута:

 <img src={workoutImage.img1} alt="" />
 

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

 const images = [
  "./images/workout-image1.jpg",
  "./images/workout-image2.jpg",
  "./images/workout-image3.jpg",
];
 

Ответ №2:

У вас есть массив объектов, и у вас есть разные ключи в каждом из объектов.

Это должен быть массив строк.

 const images = [
  "./images/workout-image1.jpg",
  "./images/workout-image2.jpg",
  "./images/workout-image3.jpg"
];
 

Ответ №3:

Самое простое, что можно сделать, это изменить свой workoutImage таким образом:

 function workoutImage() {
  const images = [
    "./images/workout-image1.jpg",
    "./images/workout-image2.jpg",
    "./images/workout-image3.jpg",
  ];

  const imageIndex = Math.floor(Math.random() * images.length);
  let returnImage = images[imageIndex];

  return returnImage;
}

export default workoutImage;
 

Теперь вы должны увидеть свое изображение внутри img .

Ответ №4:

 import img from workoutImage
 

и используйте изображение, подобное этому

  <img src={img} alt="" />
 

Ответ №5:

Измените эту строку :

 let returnImage = images[imageIndex];
 

Для :

     let returnImage = '';
Object.keys(images[imageIndex]).map((key) => {
  returnImage = images[imageIndex][key]
});