Рендеринг каруселей в reactjs

У меня есть схема json, в зависимости от этой схемы я хочу показать слайдер / карусель, поэтому, если схема json имеет 3 объекта, я хочу визуализировать слайдер 3 раза в компоненте ReactJS и изображения в этом массиве объектов, а также в слайдере / карусель.

Скажем, у меня есть 3 объекта в моем json, тогда эта карусель должна быть отрисована 3 раза

import APIData from "../../data/api.json";
            <Carousel {...settings}>
              {APIData.map((data, index) => {
                data.images.map((images, index) => {
                  return <img key = {index} src = {images} alt = {index} />;
                });
              })}
            </Carousel>

Сколько раз мне придется это отображать и как я могу это сделать?

api.json

[
  {
    "id": "DR001",
    "propertyFullName": "8838, Brook St, NY",
    "propertyShortName": "Anchorage, AK 99501",
    "features": ["2 beds", "1 bath", "865 sqft"],
    "description": "data.",
    "images": [
      "http://placehold.it/1000x400/ffffff/c0392b/&text=slide1",
      "http://placehold.it/1000x400/ffffff/c0392b/&text=slide2",
      "http://placehold.it/1000x400/ffffff/c0392b/&text=slide3",
      "http://placehold.it/1000x400/ffffff/c0392b/&text=slide4",
      "http://placehold.it/1000x400/ffffff/c0392b/&text=slide5",
      "http://placehold.it/1000x400/ffffff/c0392b/&text=slide6"
    ],
    "status": true
  },
  {
    "id": "DR002",
    "propertyFullName": "8838, Brook St, NY",
    "propertyShortName": "Anchorage, AK 99501",
    "features": ["2 beds", "1 bath", "865 sqft"],
    "description": "data.",
    "images": [
      "http://placehold.it/1000x400/ffffff/c0392b/&text=slide1",
      "http://placehold.it/1000x400/ffffff/c0392b/&text=slide2",
      "http://placehold.it/1000x400/ffffff/c0392b/&text=slide3",
      "http://placehold.it/1000x400/ffffff/c0392b/&text=slide4",
      "http://placehold.it/1000x400/ffffff/c0392b/&text=slide5",
      "http://placehold.it/1000x400/ffffff/c0392b/&text=slide6"
    ]
  }
]

Пожалуйста, предоставьте пример json

Juned Lanja 27.10.2018 07:08
Поведение ключевого слова "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) для оценки ваших знаний,...
0
1
967
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Прокрутите каждый элемент APIData и верните карусель с изображений

     {
      APIData.map((data, index) => {
        return (
           <Carousel {...settings}>
             {data.images.map((images, index) => {
                return <img key = {index} src = {images} alt = {index} />;
             });}
           </Carousel>
        )
      })
     }

Даже если я верну его, он отобразит только 1 карусель

user10415043 27.10.2018 07:15

рендерит ли он два изображения по одному для каждого объекта в массиве?

Juned Lanja 27.10.2018 07:18

ДА! Точно ... В другой версии кода он будет отображать 2 карусели по вертикали со всеми 6 слайдами.

user10415043 27.10.2018 07:22

Вам не кажется, что <Carousel> тоже нужно переделывать?

user10415043 27.10.2018 07:23

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

Juned Lanja 27.10.2018 07:25

Я хочу карусель для каждого объекта, присутствующего в схеме json

user10415043 27.10.2018 07:27

Могу подтвердить это в понедельник :)

user10415043 27.10.2018 07:42

Это синтаксическая ошибка, кроме того, что ваши ответы и ответы Асафа идентичны

user10415043 29.10.2018 01:02
import React from "react";
import APIData from "../../data/api.json";
import Carousel from '....';

export default class SimpleSlider extends React.Component {

    sliders(){
       return APIData.map(({id,images}) => {
        return (
           <Carousel {...settings} key = {id}>
             {images.map(({image}) => {
                return <img key = {image} src = {image} alt = {image}/>;
             });}
           </Carousel>
        )
      })
    }

    render() {
      return (
       {this.sliders()}
      );
   }
}

Я отредактировал свой ответ, пожалуйста, проверьте, полезен ли ты

Asif vora 27.10.2018 07:36
Ответ принят как подходящий

Наш APIData - это массив объектов, структура объекта такая.

{
  "id": "DR001",
  ... fields,
  "images": [
    "http://placehold.it/1000x400/ffffff/c0392b/&text=slide1",
    "http://placehold.it/1000x400/ffffff/c0392b/&text=slide2"
  ],
}

Нам нужно обернуть каждый объект компонентом Carousel, поэтому сначала мы перебираем массив APIData с помощью Array.map, который дает нам object с каждой итерацией, затем мы перебираем массив images внутри этого объекта и визуализируем тег img с источником изображение для каждого изображения в массиве.

// If all what we are doing is returning something from an arrow function
// we can omit the return statement and the {} and just wrap it in () or not wrap it
// at all but with () it is more readable
APIData.map(data => (
  <Carousel key = {data.id} {...settings}>
    {data.images.map(imgSrc => (
      <img key = {imgSrc} src = {imgSrc} alt = {data.propertyFullName} />
    ))}
  </Carousel>
));

Чтобы увидеть, что делает map, вы можете выполнить этот код.

APIData.map((data, index) => {
  console.info(`Outer map iteration number ${index + 1}`);
  console.info('Outer map data', data);
  console.info('Inner map within the outer map');
  data.images.map(img => {
    console.info(img);
  });
});

это выглядит чистым

user10415043 27.10.2018 07:43

Привет, Асаф, можешь добавить к этому какое-нибудь объяснение?

user10415043 28.10.2018 20:11

Я добавил объяснение, надеюсь, это поможет.

Asaf Aviv 28.10.2018 23:01

спасибо, это действительно полезно, улучшил весь код после этого

user10415043 29.10.2018 01:05

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