В моем веб-приложении есть Галерея, которую я импортировал с помощью 'React-Photo-Gallery.'
Я могу заполнить галерею изображениями и открыть фотографиюкарусель по клику. Как я могу получить индекс изображения, по которому щелкнули, используя метод onClick? activeIndex по умолчанию имеет значение 0, поэтому при нажатии на любое изображение отображается первое изображение в массиве. Я бы хотел, чтобы клик-изображение отображалось в карусели / лайтбоксе.
const mappingFunction = (img, index) => ({index, src: img.url, sizes: ["(min-width: 480px) 20vw,(min-width: 1024px) 25vw,25vw"], width: 4, height: 3});
const photosForGallery = images.map(mappingFunction)
После сопоставления изображений я отображаю это так:
<Gallery photos={photosForGallery} direction={"column"} columns={4} onClick={() => this.setState({ activeIndex: *use index here*, isOpen: true })} />
{isOpen && (
<Lightbox
mainSrc={urls[activeIndex]}
mainSrcThumbnail={urls[activeIndex]}
nextSrc={urls[(activeIndex + 1) % urls.length]}
nextSrcThumbnail={urls[(activeIndex + 1) % urls.length]}
prevSrc={urls[(activeIndex + urls.length - 1) % urls.length]}
prevSrcThumbnail={urls[(activeIndex + urls.length - 1) % urls.length]}
onCloseRequest={() => this.setState({ isOpen: false })}
onMovePrevRequest={() =>
this.setState({
activeIndex: (activeIndex + urls.length - 1) % urls.length
})
}
onMoveNextRequest={() =>
this.setState({
activeIndex: (activeIndex + 1) % urls.length
})
}
/>
)}
Там, где я испытываю трудности с доступом к индексу выбранного изображения. Я попытался использовать ключевое слово this и даже попытался реализовать функцию обратного вызова. Однако (поправьте меня, если я ошибаюсь), похоже, что выбранный элемент при нажатии - это сама Галерея, а не мое выбранное изображение. Любой вклад будет оценен, так как я новичок в React / JS.
Буду продолжать обновлять мой вопрос по мере того, как я буду проводить дополнительные исследования, хотя любые отзывы приветствуются.