6

我遇到了 react-slick 的问题。主题行可能没有意义,但我将尝试详细解释该场景。请参阅此示例小提琴以查看实际问题。

var DemoSlider = React.createClass({
getSlides(count) {
var slides = [];
for(var i = 0; i < count; i++) {
    slides.push((<img key={i} src='http://placekitten.com/g/400/200' />));
}
return slides;
},

render: function() {
var settings = {
    dots: false,
  infinite: false,
  slidesToShow: 3,
  slidesToScroll: 3
}

var slides = this.getSlides(this.props.count);

return (
    <div className='container'>
    <Slider {...settings}>
        { slides }
    </Slider>
  </div>
);
}
});

在此演示中,滑块最初显示 20 张幻灯片(每页 3 张)。这个想法是,如果您单击按钮,它将生成一个随机数,这将是新的幻灯片数。代码相当简单且不言自明。

要重现该问题, 1. 继续单击下一步箭头,直到到达最后一张幻灯片。
2. 单击“单击”按钮以生成新的随机幻灯片数。

我的期望是幻灯片将返回到第一张幻灯片,但不会停留在以前的页面上。更糟糕的是,如果新的幻灯片数量低于之前的数量,用户将看到没有幻灯片的空白页面。单击上一个错误时,他/她可以转到上一个幻灯片,一切正常,但初始显示破坏了用户体验。

我是否缺少在代码中添加的内容,或者这是一个错误?

谢谢,阿比。

4

2 回答 2

9

我会说这是一个相当有问题的行为,但你仍然可以通过在新集合通过后强制重绘来实现你想要的props,通过重置反应key

<DemoSlider key={Date.now()} count={this.state.count}/> 

更新的小提琴

于 2016-05-30T20:25:05.560 回答
1

快速解决方法:当您更改为一组新幻灯片时,请移除组件并重新构建它。然后从第一张幻灯片开始。您可以通过增加 的key属性来做到这一点DemoSlider

要进行适当的修复,您需要告诉组件更改“当前幻灯片”,这样它就不会查看超出末尾的幻灯片索引,而是随便查看https://cdnjs.cloudflare 的源代码。 com/ajax/libs/react-slick/0.11.0/react-slick.js建议它目前不允许这样做。需要进行更改以InnerSlider.componentWillReceiveProps()检查state.currentSlide和。props.slidesToShowstate.slideCount

它也将受益于允许currentSlide作为道具传递。

于 2016-06-03T22:24:08.977 回答