如果在 React slick 中当前幻灯片之前或之后没有可用的幻灯片,请禁用 Prev 或 Next 按钮。 (上一个下一个方法)

Disable Prev or Next Button if there is no slides available before or after the current slide in react slick. (PreviousNextMethod)

我使用了 React slick PrevNextMethod
https://react-slick.neostack.com/docs/example/previous-next-methods

我将 Infinite 设置为 false,因此轮播中不会显示循环。 现在,如果在当前显示的幻灯片之前没有可用的幻灯片,我想禁用上一个按钮,或者禁用下一个按钮,反之亦然。

官方文档中没有选项。有什么方法可以做到这一点吗?

是的,可以使用 beforeChange 回调来完成。

这是我根据文档中的示例之一创建的基本示例:

export default class SimpleSlider extends Component {
  state = { index: 0 };
  next = () => {
    this.slider.slickNext();
  };
  previous = () => {
    this.slider.slickPrev();
  };
  beforeChange = (prev, next) => {
    this.setState({ index: next });
  };
  render() {
    const settings = {
      infinite: false,
      speed: 500,
      slidesToShow: 1,
      slidesToScroll: 1,
      arrows: true,
      beforeChange: this.beforeChange
    };
    const index = this.state.index;
    return (
      <div>
        <h2> Single Item</h2>
        <Slider {...settings} ref={c => (this.slider = c)}>
          <div>
            <h3>1</h3>
          </div>
          <div>
            <h3>2</h3>
          </div>
          <div>
            <h3>3</h3>
          </div>
          <div>
            <h3>4</h3>
          </div>
          <div>
            <h3>5</h3>
          </div>
          <div>
            <h3>6</h3>
          </div>
        </Slider>
        <div style={{ textAlign: "center" }}>
          <button
            className="button"
            disabled={index === 0}
            onClick={this.previous}
          >
            Previous
          </button>
          <button className="button" disabled={index === 5} onClick={this.next}>
            Next
          </button>
        </div>
      </div>
    );
  }
}

您只需将 index 保持在某处的状态即可跟踪它。

基本codepen here

使用自定义箭头,您可以在自定义箭头组件上获得 className 属性,react-slick 将 class slick-disabled 添加到该箭头,如果它没有有更多的幻灯片要显示,所以考虑到这一点,您可以查看 className?.includes("slick-disabled"),更多详细信息如下:

import React from "react";
import Slider from "react-slick";

const NextArrow: React.FC<ArrowsProps> = ({ onClick, className }) => (
  <ArrowRightContainer onClick={onClick} isDisabled={className?.includes("slick-disabled")}>
    <Icon name="chevron-right" />
  </ArrowRightContainer>
);

const PrevArrow: React.FC<ArrowsProps> = ({ onClick, className }) => (
  <ArrowLeftContainer onClick={onClick} isDisabled={className?.includes("slick-disabled")}>
    <Icon name="chevron-right" styles={ArrowLeftIcon} />
  </ArrowLeftContainer>
);


const settings = {
  infinite: false,
  speed: 350,
  slidesToShow: 4,
  slidesToScroll: 1,
  nextArrow: <NextArrow />,
  prevArrow: <PrevArrow />,
};

<Slider {...settings}>
 .....
</Slider>