Задать вопрос
alexjet73
@alexjet73

Как выводить несколько компонентов React с доступом к ним по ref?

Здравствуйте! Есть компонент React, который сейчас выводится в 1 экземпляре.
let compexample = useRef();
....
<CompExample ref={compexample} />
....
(внутри естественно имеется forwardRef)

Как теперь его вывести в цикле в зависимости от числового значение в state (кол-во копий) и иметь ref ссылки на все копии?
Пробовал сделать так:
const [numComp, setNumComp] = useState(1);
const compRefs = useRef([]);

   // Обновляем refs при изменении numComp
    useEffect(() => {
        compRefs.current = Array(numComp).fill(null);
    }, [numComp]);

    // Установка ref для каждого компонента
    const setRef = (el, index) => {
        compRefs.current[index] = el;
    };

   const handleClick = useCallback((index) => {
            console.log(compRefs.current[index]);
    });
Рендер
{[...Array(numComp)].map((_, index) => (
                        <CompExample ref={(el) => setRef(el, index)} onClick={() => handleClick(index)}/>
                ))}
в консоли по клику выводится null
  • Вопрос задан
  • 53 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
0xD34F
@0xD34F Куратор тега React
в консоли по клику выводится null

Которые вы сами и установили в качестве значений ссылок на элементы - коллбек useEffect'а выполняется после ref'а, так что вы затираете только что сохранённые ссылки.

Вместо создания нового массива с null'ами вырезайте нужное из уже существующего:

- compRefs.current = Array(numComp).fill(null);
+ compRefs.current = compRefs.current.slice(0, numComp);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы