@Fedyaaaa

Как передать массив Refs в другой компонент?

Есть компонент Component1, в котором есть массив Refs useRef([]). Пытаюсь передать этот массив в другой компонент, но выдаёт ошибку: "Cannot read properties of undefined (reading 'current')", что невозможно прочитать свойства. Подскажите, как решить проблему?
const sectionRefs = useRef([]);

<ScrollToNextSection visibleSection={visibleSection} ref={sectionRefs} />

import { useState, useRef, forwardRef } from "react";
import "./ScrollToNextSection.css";

function ScrollToNextSection() {
  const ScrollToSection = ({ visibleSection, ref }) => {
    const currentIndex = ref.current.findIndex(
      (ref) => ref && ref.id === visibleSection
    );
    const nextSection = ref.current[currentIndex + 1];

    if (nextSection) {
      nextSection.scrollIntoView({ behavior: "smooth" });
      return;
    }

    ref.current[0].scrollIntoView({ behavior: "smooth" });
  };

  return (
    <button onClick={ScrollToSection} className="scroll-btn">
      Вниз
    </button>
  );
}
export default ScrollToNextSection;
  • Вопрос задан
  • 62 просмотра
Пригласить эксперта
Ответы на вопрос 1
NikFaraday
@NikFaraday
Student full-stack Developer
Попробуйте вот так:
import { useState, useRef, forwardRef } from "react";
import "./ScrollToNextSection.css";

const ScrollToNextSection = forwardRef(({ visibleSection }, ref) => {
  const scrollToSection = () => {
    const currentIndex = ref.current.findIndex(
      (sectionRef) => sectionRef && sectionRef.id === visibleSection
    );
    const nextSection = ref.current[currentIndex + 1];

    if (nextSection) {
      nextSection.scrollIntoView({ behavior: "smooth" });
    } else if (ref.current[0]) {
      ref.current[0].scrollIntoView({ behavior: "smooth" });
    }
  };

  return (
    <button onClick={scrollToSection} className="scroll-btn">
      Вниз
    </button>
  );
});

export default ScrollToNextSection;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
21 нояб. 2024, в 19:31
500 руб./за проект
21 нояб. 2024, в 19:28
200000 руб./за проект
21 нояб. 2024, в 19:09
5000 руб./за проект