Вы нарушаете Правила хуков Не вызывайте хуки внутри циклов, условий или вложенных функций
Решением может быть использование useRef
для объявления переменной экземпляра , которая будет массивом, и использование ref callback
для заполнения элементов этого массива:
const childComponent = props => {
const itemsRef = useRef([]);
// you can access the elements with itemsRef.current[n]
return (
<ul>
{props.menuItems.map((el,i) =>
<li
key={i}
ref={el => itemsRef.current[i] = el}
children={el.name}
/>
}
</ul>
);
}
Если вам не нужны нулевые значения в массиве, вы можете добавить эффект, чтобы синхронизировать длину массива с длиной props.menuItems
(эффект будет называться после обратных вызовов refs)
useEffect(() => {
itemsRef.current = itemsRef.current.slice(0, props.menuItems.length);
}, [props.menuItems]);