首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Slick Carousel错误

Slick Carousel错误
EN

Stack Overflow用户
提问于 2016-11-17 12:45:56
回答 1查看 4K关注 0票数 1

有人知道这个错误的可能原因吗?

代码语言:javascript
复制
Uncaught TypeError: Cannot read property 'add' of null

我在React.js中使用圆滑的旋转木马。我将图像数组作为prop传入,并调用图像滑块组件中的slick函数。这个组件在一个页面上运行良好,但在另一个页面上,我一直看到这个错误,图像显示在滑块中,但我认为由于这个错误,页面上的其他东西正在中断,你有什么想法吗?

下面是组件的主要代码,图像是作为道具从父级传递的:

代码语言:javascript
复制
import React from 'react';
import {Link} from 'react-router';
import _ from 'lodash';
import Carousel from '../../Util/Carousel';

const ResOpt = [{
    breakpoint: 768,
    settings: {
      slidesToShow: 3,
      slidesToScroll: 3,
      arrows: true,
      dots: false
    }
  }, {
    breakpoint: 600,
    settings: {
      slidesToShow: 1.5,
      slidesToScroll: 1.5,
      arrows: false,
      dots: false,
      infinite: false
    }
  }
];

class ImagesCarousel extends React.Component {
  constructor() {
    super();
    this.carouselDidStart = false;
    this.carousel = new Carousel({
      outerSelector: ".carousel-container",
      innerSelector: ".images-container",
      responsive: ResOpt,
      infinite: false
    });
  }

  componentDidUpdate() {
    if (!this.carouselDidStart && this.dataIsLoaded() ) {
      this.carousel.startCarousel();

    }
  }

  componentWillUnmount() {
    if (this.carousel) {
      this.carousel.destroy();
      this.carousel = null;
    }
  }

  dataIsLoaded() {
    return !_.isEmpty(this.props.images);
  }

  render() {

    let images = this.props.images;

    return (
      <div className="detail-images">

        <div className="carousel-container">
          <div className="images-container">
            {
              (images || []).map((image, index) => {
                return <div key={image.imageId} className="img-item"><img src={image.imageName}  /></div>
              })
            }
          </div>
        </div>
      </div>
    );
  }
}

export default ImagesCarousel;

下面是主carousel类:

代码语言:javascript
复制
import $ from 'jquery';
import slick from 'slick-carousel';


export default class Carousel {
  constructor(options) {
    this.carouselIsOn = false;
    this.breakpoint = breakpoint;
    this.innerSelector = options['innerSelector'];
    this.outerSelector = options['outerSelector'];
    this.slickOptions = {
      infinite: options.infinite || true,
      slidesToShow: options['slidesToShow'] || 3,
      slidesToScroll: options['slidesToScroll'] || 3,
      dots: true,
      arrows: true,
      appendArrows: options.appendArrows || `${this.outerSelector} .carousel-nav`,
      appendDots: options.appendDots  || `${this.outerSelector} .carousel-nav`,
      responsive: options.responsive || DEFAULT_RESPONSIVE
    };
    this.startCarousel = this.startCarousel.bind(this);
  }

  startCarousel() {
    const carouselContainer = $(this.innerSelector);
    carouselContainer.slick(this.slickOptions);
    this.carouselIsOn = true;

    carouselContainer.find('.slick-cloned').attr('data-reactid', null);
  }

  destroy() {
    $(this.innerSelector).slick("unslick");
  }


}
EN

回答 1

Stack Overflow用户

发布于 2016-11-23 18:27:40

这可能是对slick进行两次初始化的结果-请参见此other SO question。您可以使用init event检查是否正在运行init两次。

代码语言:javascript
复制
$( '.your-slick-container' ).on('init', function(event, slick, direction){
    console.log('slick init');
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40646907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档