从另一个组件更改光滑的滑块
Change slick slider slides from another component
我有两个独立的组件。在组件 A 中我有一些链接,在组件 B 中有一个光滑的滑块。如何使用组件 A 中的 Links onClick 事件更改幻灯片。
您需要在最近的公共父组件中管理一个 slideIndex
状态。
向下传递 setSlideIndex
作为 Links 组件更新状态的 prop。状态向下传递到 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
};
我有两个独立的组件。在组件 A 中我有一些链接,在组件 B 中有一个光滑的滑块。如何使用组件 A 中的 Links onClick 事件更改幻灯片。
您需要在最近的公共父组件中管理一个 slideIndex
状态。
向下传递 setSlideIndex
作为 Links 组件更新状态的 prop。状态向下传递到 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
};