#reactjs #carousel #react-bootstrap
#reactjs #карусель #react-bootstrap
Вопрос:
РЕДАКТИРОВАТЬ: ссылка на CodeSandbox — https://codesandbox.io/s/lucid-boyd-9tqhg?file=/src/HomeCarousels.js
Следующий код работает нормально:
<Carousel>
<Carousel.Item>
<img
className="d-block w-100"
src="https://www.fg-a.com/wallpapers/2019-black-fantasy-sky.jpg"
alt="Second slide"
/>
<Carousel.Caption>
<h3>Second slide label</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
</Carousel.Caption>
</Carousel.Item>
<Carousel.Item>
<img
className="d-block w-100"
src="https://www.fg-a.com/wallpapers/black-circles-2018.jpg"
alt="Third slide"
/>
<Carousel.Caption>
<h3>Third slide label</h3>
<p>Praesent commodo cursus magna, vel scelerisque nisl consectetur.</p>
</Carousel.Caption>
</Carousel.Item>
</Carousel>
Однако, когда я пытаюсь реорганизовать его, переместив одну карусель.Элемент в свой собственный компонент React, я сталкиваюсь с проблемами.
SingleCarousel.js
class SingleCarousel extends React.Component {
render() {
return (
<Carousel.Item>
<img
className="d-block w-100"
src={this.props.imgPath}
alt={this.props.header}
/>
<Carousel.Caption>
<h3>{this.props.header}</h3>
<p>{this.props.content}</p>
</Carousel.Caption>
</Carousel.Item>
);
}
}
Main.js (в настоящее время просто заменяю одну карусель экземпляром класса):
<Carousel>
<SingleCarousel
imgPath="https://www.fg-a.com/wallpapers/2019-black-fantasy-sky.jpg"
header="Second slide label"
content="Lorem ipsum dolor sit amet, consectetur adipiscing elit."
/>
<Carousel.Item>
<img
className="d-block w-100"
src="https://www.fg-a.com/wallpapers/black-circles-2018.jpg"
alt="Third slide"
/>
<Carousel.Caption>
<h3>Third slide label</h3>
<p>Praesent commodo cursus magna, vel scelerisque nisl consectetur.</p>
</Carousel.Caption>
</Carousel.Item>
</Carousel>
Во втором случае первый элемент карусели не отображается на странице. Тем не менее, я вижу элемент DOM, присутствующий в дереве DOM. При проверке в Chrome проблема заключается в том, что div «carousel-item» для первого элемента никогда не меняется на «активный элемент карусели». На самом деле у меня более двух элементов, поэтому я вижу, что он перебирает все элементы, но не может преобразовать элемент компонента в активный, поэтому он не отображается. Почему я испытываю такое поведение? Разве две части кода не эквивалентны и не должны приводить к одинаковому поведению?
Комментарии:
1. Лучше добавить пример кода в codesandbox для отладки
2. оба кода эквивалентны, вы делаете что-то не так, пожалуйста, создайте его демонстрацию, чтобы мы могли решить вашу проблему как можно скорее
3. @A.R.SEIF спасибо за предложение, добавлена ссылка codesanbox, о которой идет речь.
4. Пожалуйста, добавьте второй подход (с проблемами) в codesandbox
Ответ №1:
Я думал, что оба кода эквивалентны, но это не так, поэтому один из ответов — заменить Carousel.Item
на Fragment
в вашем SingleCarousel
и вызвать его как
<Carousel.Item>
<SingleCarousel
imgPath="https://www.fg-a.com/wallpapers/black-with-stars.jpg"
header="First slide label"
content="Placeholder text"
/>
</Carousel.Item>
Carousel.Item
требуется для перехода, поэтому вам нужно добавить это перед вызовом чего-либо
Codesandbox: https://codesandbox.io/s/purple-wave-3300o?file=/src/HomeCarousels.js