I'm using GlideJS with a React Project, but it's returning a strange behavior. The components are not showing one per view and the width of them is changed.
The Component:
import React, { Component } from "react";
import Glide from "@glidejs/glide";
export default class SliderGlide extends Component {
state = { id: null };
componentDidMount = () => {
// Generated random id
this.setState(
{ id: `glide-${Math.ceil(Math.random() * 100)}` },
this.initializeGlider
);
};
initializeGlider = () => {
this.slider = new Glide(`#${this.state.id}`, this.props.options);
this.slider.mount();
};
componentWillReceiveProps = newProps => {
if (this.props.options.startAt !== newProps.options.startAt) {
this.slider.go(`=${newProps.options.startAt}`);
}
};
render = () => (
<div
id={this.state.id}
className="mt-10"
style={{ overflowX: "hidden", userSelect: "none", maxWidth: "100vw" }}
>
<div className="glide__arrows" data-glide-el="controls">
<button
className="glide__arrow glide__arrow--left rounded-full"
data-glide-dir="<"
title="Veja mais ofertas!"
>
<span className="hidden">Anterior</span>
</button>
<button
className="glide__arrow glide__arrow--right rounded-full"
data-glide-dir=">"
title="Veja mais ofertas!"
>
<span className="hidden">Próximo</span>
</button>
</div>
<div className="glide__track" data-glide-el="track">
<div className="glide__slides" style={{ display: "flex" }}>
{this.props.children.map((slide, index) => {
return React.cloneElement(slide, {
key: index,
className: `${slide.props.className} glide__slide`
});
})}
</div>
</div>
<div className="glide__bullets" data-glide-el="controls[nav]">
{this.props.children.map((slide, index) => {
return <button key={index} className="glide__bullet rounded-full" data-glide-dir={"=" + index} />;
})}
</div>
</div>
);
}
SliderGlide.defaultProps = {
options: {}
};
So inside of the Carousel component, i pass the childrens and the options for glide, that are the components.
const Plans = ({ plans, handleOffer }) => {
const carouselOptions = { type: 'slide',
perView: 1,
startAt: 0,
}
return (
<div className="section__slider relative mt-10 flex justify-center items-center">
<Carousel options={carouselOptions}>
{ plans.map((plan, i) => {
return (
<OfferProduct key={i} i={i} plan={plan} handleOffer={handleOffer}/>
)
})
}
</Carousel>
</div>
)
}
export default Plans;
I want to know if the problem is related to my code, some missed styledsheet that i need to import or if the actions passed to glide are wrong.