【问题标题】:Change slick slider slides from another component从另一个组件更改光滑的滑块幻灯片
【发布时间】:2020-05-22 18:23:21
【问题描述】:

我有两个独立的组件。在组件 A 中,我有一些链接,在组件 B 中,我有一个光滑的滑块。如何使用组件 A 中的 Links onClick 事件更改幻灯片。

【问题讨论】:

    标签: reactjs slider carousel antd slick.js


    【解决方案1】:

    您需要在最近的公共父组件中管理slideIndex 状态。

    传递 setSlideIndex 作为 Links 组件更新状态的道具。状态被传递给 Slider 组件并使用 react-slick 的 slickGoTo 函数将轮播更新为 useEffect

    import React, { useState, useEffect, useRef } from "react";
    import Carousel from "react-slick";
    import "slick-carousel/slick/slick.css";
    
    function Parent() {
      const [slideIndex, setSlideIndex] = useState(0);
    
      return (
        <>
          <Links onClick={setSlideIndex} />
          <Slider slideIndex={slideIndex} />
        </>
      );
    }
    
    function Links({ onClick }) {
      return (
        <ul>
          <li>
            <button onClick={() => onClick(0)}>Show Slide 1</button>
          </li>
          <li>
            <button onClick={() => onClick(1)}>Show Slide 2</button>
          </li>
          <li>
            <button onClick={() => onClick(2)}>Show Slide 3</button>
          </li>
          <li>
            <button onClick={() => onClick(3)}>Show Slide 4</button>
          </li>
        </ul>
      );
    }
    
    function Slider({ slideIndex }) {
      const slider = useRef();
    
      useEffect(() => {
        slider.current.slickGoTo(slideIndex);
      }, [slideIndex]);
    
      return (
        <Carousel ref={slider}>
          <div>Slide 1</div>
          <div>Slide 2</div>
          <div>Slide 3</div>
          <div>Slide 4</div>
        </Carousel>
      );
    }
    Slider.defaultProps = {
      slideIndex: 0
    };
    

    【讨论】:

    • 使用这个解决方案动画不起作用,只渲​​染元素:(
    • 我可能误会了。我以为您的意思是您想为每个链接呈现不同的滑块。您是说您有 1 个滑块并希望在单击链接时切换到另一张幻灯片?
    • 根据我的新理解,我已经修复了这个例子。如果这能解决您的问题,请告诉我!
    • 稍微改动一下,在antd中我们应该添加slider.current.slick.slickGoTo(slideIndex)。非常感谢。
    • 太棒了!很高兴我能提供帮助!
    猜你喜欢
    • 1970-01-01
    • 2020-11-25
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-20
    相关资源
    最近更新 更多