ClassName не передается объектам - PullRequest
1 голос
/ 30 сентября 2019

Код ниже. Я пытаюсь передать активное состояние слайду в карусели для React. Но в инспекторе я получаю только имя класса [объект. объект] вместо правильного имени класса. Есть ли конкретная причина, по которой className не передается на слайды в карусели? Я пытался сделать это так

class ProductSlider extends React.Component {
    constructor(props) {
      super(props);
      this.state = { activeSlide: -1, prevSlide: -1, sliderReady: false };
    }
      runAutochangeTO() {
        this.changeTO = setTimeout(() => {
          this.changeSlides(1);
          this.runAutochangeTO();
        }, this.AUTOCHANGE_TIME);
      }
      changeSlides(change) {
        window.clearTimeout(this.changeTO);
        const { length } = this.props.slides;
        const prevSlide = this.state.activeSlide;
        let activeSlide = prevSlide + change;
        if (activeSlide < 0) activeSlide = length - 1;
        if (activeSlide >= length) activeSlide = 0;
        this.setState({ activeSlide, prevSlide });
      }
render() {
        const { activeSlide, prevSlide, sliderReady } = this.state;

        return(
            <div ClassName="product-body">
                <header>
                    <NavBar></NavBar>
                </header>
                <div className={('slider', {'s--ready': sliderReady})}>
                    <div className="carousel_nav">
                        <span id="moveLeft" className="slider__control" onClick={() => this.changeSlides(-1)}>
                            <svg className="carousel__icon" width="15" height="26" viewBox="0 0 15 26" fill="none" xmlns="http://www.w3.org/2000/svg">
                                <path d="M12.8507 24.0657L2 13.215L12.8507 2.36432" stroke="white" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
                            </svg>
                        </span>
                        <span id="moveRight" className="slider__control slider__control__right" onClick={() => this.changeSlides(1)}>
                            <svg className="carousel__icon" width="27" height="27" viewBox="0 0 27 27" fill="none" xmlns="http://www.w3.org/2000/svg">
                            <path d="M13.4109 3.00001L24.0779 14.0312L13.0467 24.6983" stroke="white" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
                            </svg>
                        </span>
                    </div>
                    <div className="slider__slides pages">
                        {slides.map((slide,index) =>(
                            <div
                            className={('slider__slide'), {'s--active':activeSlide ===index, 's--prev': prevSlide===index}}
                            key={slide.index}>
                            <div className="carousel-item ProductItem">
                              <div className="ImgWrap ImageWrap">
                                <img src={slide.img} className="carousel-item-image"></img>
                                <div className="ImgShadow"></div>
                                  </div>  
                                  <div className="ProductInfo carousel-info">
                                    <div className="ProductTop carouself-item-top" id="carouself-info-top">
                                        <h2 className="ProductPrice item_price">
                                        {slide.price}</h2>
                                        <h1 className="ProductTitle item_title">{slide.title}</h1>
                                        <div className="ProductCategoryCalories item-category-info">
                                            <h3 className="ProductCategory item_category">{slide.category}</h3>
                                            <h3 className="ProductCalories item_calories">{slide.calories}</h3>
                                        </div>
                                    </div>
                                    <p className="ProductDescrip item_description">{slide.description}</p>
                                    <div className="ProductQty product-qty">
                                        <h4 className="QtyTitle qty_title">QUANTITY</h4>
                                        <Quantity className="QtyPicker"></Quantity>
                                    </div>
                                    <button className="CheckOutBtn addToBag">
                                        <h2>ADD TO BAG</h2>
                                    </button>
                                  </div>
                                </div>
                            </div>
                        ))}
                    </div>
                </div>
            </div>
        )
    }
}
const slides = [
    { index: 0,
      background: 'green',
      img: imageList.turdBurgler, 
      price: '$5.00',
      title: 'Turd Burgler',
      category: 'stranger',
      calories: '789 calories',
      description: 'Two chocolate cake donuts smothered in cookie butter glaze. Oreo chocolate chip cookie dough. With fudge drizzle.'
    }]

Ответы [ 2 ]

1 голос
/ 30 сентября 2019

Вы можете добавить имя класса без добавления какой-либо внешней библиотеки.

<div className={`slider ${sliderReady ? 's--ready' : ''}` }>

Примечание: Подробнее о Литералы шаблонов .

0 голосов
/ 30 сентября 2019

Делая это:

<div className={('slider', {'s--ready': sliderReady})}>

Вы передаете объект className, в то время как он ожидает строку.

Я думаю, что вы ищете Имена классов, это библиотека, которая позволяет вам объединять classNames вместе, и которая может использоваться следующим образом:

const sliderClasses = classNames('slider',{ 's--ready': sliderReady });

<div className={sliderClasses}>
...