代码之家  ›  专栏  ›  技术社区  ›  HASEEB ALAM RAFIQ

如何在react中获取QuerySelector所有html元素?

  •  0
  • HASEEB ALAM RAFIQ  · 技术社区  · 2 年前

    我正在使用react with functional component。我还使用了react引导,我连接了react引导转盘,react引导一切都很好,对于一些功能,我想在react中获得三个div,div具有相同的类。我知道如果我使用简单的html css js,那么我很容易做到,

    querySelectorAll(".indicator-btn")

    但我想把这个放在react上。我该怎么做?请为我推荐一个最佳实践。

    这是我的一个组件,在最后一个组件中,我有三个div,我想用于Dom。

    import React, { useState } from "react";
    import Cardcarousel from "./Cardcarousel";
    import { Carousel } from "react-bootstrap";
    import Brand1img from "../images/brand1.png";
    import Airbnbimg from "../images/Airbnb.png";
    import Microsoft from "../images/microsoft.png";
    import { Row, Col } from "react-bootstrap";
    
    function Carouselx() {
      const [index, setIndex] = useState(0);
    
      const handleSelect = (selectedIndex, e) => {
        console.log(selectedIndex, "e=>", e);
        setIndex(selectedIndex);
      };
    
      const isSlide = (slide) => {
        console.log("slide no => " + slide);
        console.log(this);
      };
    
      return (
        <>
          <div className="px-5 py-3">
            <Carousel activeIndex={index} onSelect={handleSelect} onSlide={isSlide}>
              <Carousel.Item>
                <Row>
                  <Col>
                    <Cardcarousel
                      name="Technology UI/UX"
                      companylogo={Brand1img}
                      type="Full time job"
                    />
                  </Col>
                  <Col>
                    <Cardcarousel
                      name="Technology Backend developer"
                      companylogo={Airbnbimg}
                      type="Part time job"
                    />
                  </Col>
                  <Col>
                    <Cardcarousel
                      name="Technology Backend developer"
                      companylogo={Microsoft}
                      type="Internee"
                    />
                  </Col>
                </Row>
              </Carousel.Item>
              <Carousel.Item>
                <Row>
                  <Col>
                    <Cardcarousel
                      name="Technology UI/UX"
                      companylogo={Brand1img}
                      type="Full time job"
                    />
                  </Col>
                  <Col>
                    <Cardcarousel
                      name="Technology Backend developer"
                      companylogo={Airbnbimg}
                      type="Part time job"
                    />
                  </Col>
                  <Col>
                    <Cardcarousel
                      name="Technology front end developer"
                      companylogo={Microsoft}
                      type="Internee"
                    />
                  </Col>
                </Row>
              </Carousel.Item>
            </Carousel>
            <div className="carusel-indecator-container">
              <div className="indicator-btn indicator-btn1"></div>
              <div className="indicator-btn indicator-btn2"></div>
              <div className="indicator-btn indicator-btn3"></div>
            </div>
          </div>
        </>
      );
    }
    
    export default Carouselx;
    
    1 回复  |  直到 2 年前
        1
  •  0
  •   Igor Loskutov    2 年前

    你可以使用 useState 获取其引用(也 useRef 但可能会有更多的不便)。

    const [btn1, setBtn1] = useState();
    const [btn2, setBtn2] = useState();
    const [btn3, setBtn3] = useState();
    
    ...
    
    <div ref={setBtn1} className="indicator-btn indicator-btn1"></div>
    <div ref={setBtn2} className="indicator-btn indicator-btn2"></div>
    <div ref={setBtn3} className="indicator-btn indicator-btn3"></div>
    

    在某种程度上(第一次渲染后),您将有btn1、btn2、btn3作为按钮元素。如果你想使用它,假设是强制性的,你可以使用effect

    useEffect(() => {
      if (!btn1 || !btn2 || !btn3) return;
      // do something with these refs i.e. make them jquery! $(btn1)
    }, [btn1, btn2, btn3]);