Загрузка динамических изображений (полученных с помощью API) в React 'react-response-carousel'

Мне очень нравится «реагирующая карусель», и она идеально соответствует моим требованиям.

Подробнее: https://www.npmjs.com/package/react-responsive-carousel

Однако я понял, что представленные здесь демонстрационные примеры используют статические изображения, помещенные в отдельный файл «Carousel.js».

В моем случае я хочу загружать изображения в карусель, которые я получаю с помощью API во время выполнения. Я понятия не имею, как мне добиться такого поведения.

В настоящее время мое приложение настроено следующим образом: Файл: Carousel.js

import React from "react";
import { Carousel } from "react-responsive-carousel";

export default () => (
  <Carousel autoPlay infiniteLoop='true'>
    <div>
      <img src = "http://example.com/image/32.png" />
      <p className = "legend">Image 1</p>
    </div>
    <div>
      <img src = "http://example.com/image/34.png" />
      <p className = "legend">Image 2</p>
    </div>
    <div>
      <img src = "http://example.com/mockups/image/9.png" />
      <p className = "legend">Image 3</p>
    </div>
    <div>
      <img src = "http://example.com/image/32.png" />
      <p className = "legend">Image 4</p>
    </div>
    <div>
      <img src = "http://example.com/image/34.png" />
      <p className = "legend">Image 5</p>
    </div>
  </Carousel>
);

В моем файле App.js я просто использую его следующим образом:

<div>
<div className = "my-carousel">
<Carousel />
</div>
</div>

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

Just code 29.11.2018 13:24

Вызов API, получение результата (URL изображений). Но тогда я не знаю, как связать состояние / изображения с каруселью. Я тоже новичок в ReactJS. Фрагмент кода примера может мне помочь намного лучше. Спасибо за ваши комментарии

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

Ответы 1

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

Вот базовая последовательность действий, которую вы можете настроить под свои нужды:

  1. Прежде всего вам нужно получить изображения.
  2. После этого вы должны сохранить изображения в состоянии компонента.
  3. Наконец, визуализируйте <Carousel /> с изображениями состояния.

Вот псевдокод:

import React from 'react'
import { Carousel } from 'react-responsive-carousel'

class App extends React.Component {
  constructor(props) {
    super(props)

    this.state = {
      images: null
    }
  }

  componentDidMount() {
    // #1. First of all you have to fetch the images.
    fetch('https://example.com/images-api-endpoint')
      .then(response => response.json()) // If it's a JSON response, you have to parse it firstly
      .then(images => this.setState({ images })) // #2. After that you have to keep the images in the component's state.
  }

  render () {
    const { images } = this.state

    if (!images) return <div>Images are not fetched yet!</div>

    // #3. Finally, render the `<Carousel />` with the state's images.
    return <Carousel autoPlay infiniteLoop='true'>
      {
        images.map( image => {
          return <div>
            <img src = { image.path } />
            <p className = "legend">{ image.name }</p>
          </div>
        })
      }
    </Carousel>
  }
}

Имейте в виду, что в приведенный выше поток не включены некоторые концепции, потому что они выходят за рамки вопроса. Например:

  1. Показывает индикатор загрузки при загрузке изображений.
  2. Обработка ошибок, если запрос API не прошел.

Спасибо за ваш ответ. Позвольте мне применить это, а затем я поделюсь своим мнением. Браво!

Travolta John 30.11.2018 06:36

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