赞
踩
首先引入,我这里使用是5.3.0
npm i swiper@5.3.0 --save
然后在组件头部引入
import Swiper from 'swiper';
import 'swiper/css/swiper.css';
这里我使用的是class组件
初始化轮播组件
componentDidMount() { this.instanceSwiper() } instanceSwiper() { this.swiperObj = new Swiper('.swiper-container', { slidesPerView: 1, loop: false, autoplay: {// 自动滑动 delay: 3000, //3秒切换一次 // stopOnLastSlide: false, disableOnInteraction: false,// }, observer: true,//修改swiper自己或子元素时,自动初始化swiper 重要 observeParents: true,//修改swiper的父元素时,自动初始化swiper 重要 }) }
数据改变的时候,重新渲染
componentDidUpdate() {
this.swiperObj.update();
this.swiperObj.slideTo(0, 1000, false);
}
数据改变的时候可以会卡死,使用这个生命周期解决(list是传入的数据)。原理:当数据发生改变,先销毁swiper,再重新初始化。
componentWillReceiveProps = (nextProps) => {
const { list: oldList } = this.props
const { list: newList } = nextProps
if (oldList != newList) {
this.swiperObj.destroy();
this.swiperObj = null;
this.instanceSwiper()
}
}
结束时销毁
componentWillUnmount() {
if (this.swiperObj.destroy) { // 销毁swiper
this.swiperObj.destroy();
this.swiperObj = null;
}
}
render()中使用固定的class样式,在react中class换成className,swiper-container, swiper-no-swiping,swiper-wrapper,swiper-slide这几个className属性为固定写法,不能修改,但是可以添加样式con,swiperFather为组件外层样式。con样式添加的原因是必须设置一个height,否则无法显示轮播效果
render() { const { list} = this.props return ( <div className={styles.swiperFather}> {/* /swiper-no-swiping关闭鼠标滑动 ${styles.con}设置轮播组件的宽高*/} <div className={`swiper-container swiper-no-swiping ${styles.con}`} style={{ overflow: 'hidden' }}> <div className={`swiper-wrapper ${styles.con}`}> { list && list.length > 0 && list.map((item, index) => { return ( <div className="swiper-slide" key={`swiper${index}`}> ...more//添加自己的业务代码 </div> ) }) </div> </div> </div> ) } css样式 .swiperFather { width: 700px; height: 570px; margin-left: auto; margin-right: auto; position: relative; } .con { height: 570px; }
这个只是我个人的解决办法,应该还有其他办法
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。