我有一个与使用React实现iDangero.us Swiper相关的问题。我已经玩了一段时间了,我的问题是当我使用动态数据时实际滑动不起作用。让我举例来说明这一点。
我的代码由以下方式组成:
1)我有一个名为SwiperComponent的组件。有两个部分 - 方法componentDidMount(),其中我将Swiper组件的初始化和render()放在一起,我生成由iDangero.us Swiper定义的结构。
var SwiperComponent = React.createClass({
componentDidMount() {
this.swipe = new Swiper(React.findDOMNode(this), {
slidesPerView: 3,
centeredSlides: true,
spaceBetween: 10
});
},
render() {
return React.createElement('div', React.__spread({}, this.props, {className: 'swiper-container'}),
React.createElement('div', {className: 'swiper-wrapper'},
React.Children.map(this.props.children, function (child, index) {
return React.createElement('div', {className: 'swiper-slide'}, React.cloneElement(child));
})
)
);
}
});
2)我有一个简单的Index.jsx文件,我以一种方式准备一个“动态内容”,我只是创建一个我用一些图像填充的数组。
var Index = React.createClass({
getInitialState: function() {
return {
movies: []
};
},
componentDidMount() {
this.setState({
movies: ["http://www.themusehotel.com/design/images/930-481/nyc-skyline.jpg", "https://ephemeralnewyork.files.wordpress.com/2010/08/broadway47thstreet2010.jpg", "http://41.media.tumblr.com/27d14da3be1e02eb7b6ead5bda0ac1b2/tumblr_n5dqi4XDz61qdeuyro1_1280.jpg", "http://photos.cntraveler.com/2014/09/29/5429c32b425f183f61bf7316_new-york-city-skyline.jpg"],
});
},
render: function() {
var items = this.state.movies;
return (
<SwiperComponent>
{
items.map((item) => {
return (
<img src={item} width="100%" height="200"/>
)
})
}
</SwiperComponent>
)
}
});
正如我所提到的,问题是滑动部分不起作用。非常有趣的是,一旦我在Chrome中打开开发人员控制台或刷出数组并放置一些静态标签而不是。它开始工作。
我准备了一个JSfiddle,你可以在其中看到这个问题 - https://jsfiddle.net/4z3zyk07/4/
有人知道我错过了什么,做错了吗?我会非常感谢你的帮助。非常感谢你!
拉狄克
答案 0 :(得分:3)
这是因为你使用 this.setState 来填充"componentDidMount"
生命周期中的数组电影
当调用外部componentDidMount时,内部componentDidMount已经被调用,此时你的Swiper没有找到任何图片,因此它不能为每个图像计算正确的宽度。
在componentWillMount中初始化您的图片数据。
componentWillMount() {
this.setState({
movies: [your pictures],
});
},
然后Swiper将知道框中有多少图像并计算每个人的宽度。