我有以下code

   class Gallery extends Component {
      state = {
        media: null,
        nav: null
      };

     componentDidMount = () => {
       this.setState({
        media: this.media,
        nav: this.nav
       });
    };

     render() {
      return (
       <>
        <Carousel
          asNavFor={this.state.nav}
          touchMove={true}
          dots={false}
          ref={(carousel) => {
            this.media = carousel;
          }}
        >
          <div>
            <h3>1</h3>
          </div>
          <div>
            <h3>2</h3>
          </div>
          <div>
            <h3>3</h3>
          </div>
        </Carousel>
        <Carousel
          slidesToShow={2}
          asNavFor={this.state.media}
          ref={(carousel) => (this.nav = carousel)}
        >
          <div>
            <h3>1</h3>
          </div>
          <div>
            <h3>2</h3>
          </div>
          <div>
            <h3>3</h3>
          </div>
        </Carousel>
      </>
     );
    }
   } 

它是基于类组件编写的,请帮助我将其转换为功能组件

我试了this次,但效果不太好.当我们更改缩略图库时,主库没有更改.如果我将缩略图或按钮从1更改为2,则主幻灯片也应从1更改为2.但它没有改变

    const Gallery = () => {
      const [media, setMedia] = useState(null);
      const [nav, setNav] = useState(null);
      const carousel = useRef(null);

      const handleNext = () => {
        carousel.current.next();
      };

      const handlePrev = () => carousel.current.prev();

     useEffect(() => {
       setMedia(null);
       setNav(null);
     }, [media, nav]);
     return (
       <>
         <Carousel asNavFor={nav} touchMove={false} dots={false} ref= 
     {carousel}>
        <div>
          <h3>1</h3>
        </div>
        <div>
          <h3>2</h3>
        </div>
        <div>
          <h3>3</h3>
        </div>
      </Carousel>

      <Button onClick={handlePrev}> prev </Button>
      <Button onClick={handleNext}> next </Button>
      <Carousel
        slidesToShow={2}
        asNavFor={media}
        ref={carousel}
      >
        <div>
          <h3>1</h3>
        </div>
        <div>
          <h3>2</h3>
        </div>
        <div>
          <h3>3</h3>
        </div>
       </Carousel>
      </>
     );
    };

请帮我解决这个问题,谢谢:)

推荐答案

我已经在this link上更新了,或者你也可以看到下面的代码

import React, { Component, useState } from "react";
import ReactDOM from "react-dom";
import "antd/dist/antd.css";
import "./index.css";
import { Carousel } from "antd";

const Gallery = () => {
  const mediaRef = React.useRef(null);
  const navRef = React.useRef(null);

  const onChange = (currentSlide) => {
    console.log(currentSlide);
    mediaRef.current.goTo(currentSlide, false);
  };

  return (
    <div>
      <Carousel
        asNavFor={navRef.current}
        touchMove={false}
        dots={false}
        ref={mediaRef}
      >
        <div>
          <h3>1</h3>
        </div>
        <div>
          <h3>2</h3>
        </div>
        <div>
          <h3>3</h3>
        </div>
        <div>
          <h3>4</h3>
        </div>
      </Carousel>
      <Carousel
        slidesToShow={3}
        centerMode={true}
        asNavFor={mediaRef.current}
        draggable={true}
        ref={(carousel) => (navRef.current = carousel)}
        afterChange={onChange}
        swipeToSlide={true}
        touchThreshold={50}
        focusOnSelect={true}
      >
        <div>
          <h3>1</h3>
        </div>
        <div>
          <h3>2</h3>
        </div>
        <div>
          <h3>3</h3>
        </div>
        <div>
          <h3>4</h3>
        </div>
      </Carousel>
    </div>
  );
};

ReactDOM.render(<Gallery />, document.getElementById("container"));

Reactjs相关问答推荐

使用useReducer时,props 未从父级传递给子或孙级

在Reaction中更新状态时,我将变得未定义

react 路由GUGUD Use Effect无法通过useNavigate正常工作

页面永远加载API/从数据库获取数据

React组件未出现

React 错误: 只能用作 元素的子元素,从不直接渲染.请将您的 包裹在

React 错误无法读取未定义的属性(读取id)#react

UseEffect 似乎不适用于页面的首次渲染

在 React 中是否有任何理由要记住 Redux 操作创建者?

在 React 中,如何在指向同一组件的路由中拥有未定义数量的多个动态路径段?

如何优化 React 应用程序的性能?

组件安装后调用自定义钩子

使用带有搜索字符串的全局过滤器时如何在 React-Table 中进行精确匹配?

react 测试库不测试包含 react 路由 dom V6 的组件

如何定制 React 热 toastr ?

如何在 JSX 中使用 -webkit- 前缀?

加密 Django Rest Framework API 响应 + 解密响应应用程序中的响应

当状态改变时如何执行一些动作,但只针对第一次更新?

在 redux 状态更改时更新react 按钮禁用状态

调用函数以获取数据并在数据到达时导航到链接