У меня есть схема 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"
]
}
]
Прокрутите каждый элемент APIData и верните карусель с изображений
{
APIData.map((data, index) => {
return (
<Carousel {...settings}>
{data.images.map((images, index) => {
return <img key = {index} src = {images} alt = {index} />;
});}
</Carousel>
)
})
}
Даже если я верну его, он отобразит только 1 карусель
рендерит ли он два изображения по одному для каждого объекта в массиве?
ДА! Точно ... В другой версии кода он будет отображать 2 карусели по вертикали со всеми 6 слайдами.
Вам не кажется, что <Carousel>
тоже нужно переделывать?
Вы хотите, чтобы количество каруселей совпадало с количеством записей в массиве APIData
или карусели, или в одной карусели должны присутствовать все изображения?
Я хочу карусель для каждого объекта, присутствующего в схеме json
Могу подтвердить это в понедельник :)
Это синтаксическая ошибка, кроме того, что ваши ответы и ответы Асафа идентичны
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()}
);
}
}
Я отредактировал свой ответ, пожалуйста, проверьте, полезен ли ты
Наш 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);
});
});
это выглядит чистым
Привет, Асаф, можешь добавить к этому какое-нибудь объяснение?
Я добавил объяснение, надеюсь, это поможет.
спасибо, это действительно полезно, улучшил весь код после этого
Пожалуйста, предоставьте пример
json