Не удается использовать useRef / createRef для получения любого другого div, кроме того, что было добавлено последним. Как я могу сделать это так, когда нажимается кнопка, изменяется ссылка на div.
Я пробовал использовать как useRef, так и createRef. Поскольку я хочу создать новый экземпляр ref, я больше изучил createRef, чем useRef. Я также играл с useEffect. Но мое решение не помогло мне с моей самой большой проблемой
Я сделал небольшой проект, содержащий 3 компонента, чтобы помочь вам понять, что я пытаюсь объяснить.
У меня также есть база данных, содержащая фиктивные данные -> в моем реальном проекте это не проблема. Это массив, содержащий объекты. [{'id': '1', 'name': 'first'}, ...]
Главный:
const MainComponent = () => {
const dataRef = React.createRef(null)
React.useEffect (() => {
if(dataRef && dataRef.current){
dataRef.current.scrollIntoView({ behavior:'smooth', block:'start' })
}
},[dataRef])
const _onClick = (e) => {
dataRef.current.focus();
}
return(
<>
{data && data.map((entry, index) =>{
return <ButtonList
key={index}
entry={entry}
onClick={_onClick}
/>
})}
{data && data.map((entry, index) =>{
return <ListingAllData
key={index}
dataRef={dataRef}
entry={entry}
index={index}/>
})}
</>
)
}
Компонент кнопки
const ButtonList = ({ entry, onClick }) => {
return <button onClick={onClick}>{entry.name}</button>
}
Компонент данных листинга
const ListingAllData = (props) => {
const {entry, dataRef } = props;
return (
<div ref={dataRef}>
<p>{entry.id}</p>
<p>{entry.name}</p>
</div>
);
}
Я консоль зарегистрировал data.current, он извлекает только последний элемент. Я надеялся, что он найдет ту кнопку, которую я нажал.