【发布时间】:2021-04-27 15:40:56
【问题描述】:
我有一个组合使用两个滑块的组件(总共 4 个)。一种组合用于水平旋转木马,另一种用于垂直旋转。此决定取决于屏幕尺寸。
当它在较小的设备上呈现时,它可以正常工作,但在较大的屏幕上,它会呈现,但是一旦我单击用于移动幻灯片的按钮,它就会崩溃并出现以下错误。
我正在使用react-slick 作为轮播。
这是组件代码:
class Carousel extends Component {
constructor(props) {
super(props);
this.state = {
imageSlider: null,
contentSlider: null,
isMobile: true
};
this.getHorizontalSlider = this.getHorizontalSlider.bind(this);
this.getVerticalSlider = this.getVerticalSlider.bind(this);
}
componentDidMount() {
const isMobile = window.screen.width > 768 ? false : true;
this.setState({
imageSlider: this.slider1,
contentSlider: this.slider2,
isMobile: isMobile
});
}
getHorizontalSlider() {
return (
<div className={this.props.className}>
<Slider
asNavFor={this.state.contentSlider}
ref={slider => (this.slider1 = slider)}
className={styles.horizontalImageSlider}
focusOnSelect={false}
arrows={false}
dots={true}
autoplay={true}
autoplaySpeed={7000}
>
{
data.map((item, index) => (
<div key={index}>
<img src={item.imageUrl} className={`${styles.carouselImage} img-fluid mx-auto`} alt="" />
</div>
))
}
</Slider>
<Slider
asNavFor={this.state.imageSlider}
ref={slider => (this.slider2 = slider)}
focusOnSelect={false}
arrows={false}
>
{
data.map((item, index, arr) => (
<div key={index} className='text-center text-secondary'>
<h2 className="text-primary fw-bold mb-4">{item.heading}</h2>
<p className='lead px-2'>{item.description}</p>
</div>
))
}
</Slider>
</div>
)
}
getVerticalSlider() {
return (
<div className={`row ${this.props.className}`}>
<div className="col-4">
<Slider
asNavFor={this.state.contentSlider}
ref={slider => (this.slider1 = slider)}
vertical={true}
arrows={false}
slidesToScroll={1}
verticalSwiping={false}
focusOnSelect={false}
slidesToShow={1}
>
{
data.map((item, index) => (
<div key={index}>
<img src={item.imageUrl} className={`${styles.carouselImage} img-fluid mx-auto`} alt="" />
</div>
))
}
</Slider>
</div>
<div className="col-8">
<div className='d-flex justify-content-center align-items-center h-100'>
<Slider
className={styles.verticalContentSlider}
asNavFor={this.state.imageSlider}
ref={slider => (this.slider2 = slider)}
slidesToScroll={1}
slidesToShow={1}
swipeToSlide={true}
focusOnSelect={true}
vertical={true}
adaptiveHeight={true}
nextArrow={<CustomArrow />}
prevArrow={<CustomArrow />}
>
{
data.map((item, index, arr) => (
<div key={index}>
{getSlideContent(item, index, arr)}
</div>
))
}
</Slider>
</div>
</div>
</div>
)
}
render() {
if (this.state.isMobile === true) {
return this.getHorizontalSlider();
}
return this.getVerticalSlider();
}
}
我知道这不是最好的代码,但我想先完成这项工作,然后再对其进行重构。 感谢您阅读本文,非常感谢。
【问题讨论】:
-
似乎与
refs 冲突有关,因为该问题仅在安装后呈现不同的<Slider>时发生。 -
看起来像那样......所以我最终将它们提取到单独的组件中(VerticaSlider 和 HorizontalSlider)。这似乎解决了我的问题。但是,我不确定这是否应该被接受为答案。
标签: reactjs next.js slick.js react-slick