Не удается использовать useRef / createRef, чтобы получить любые другие элементы div, отличные от того, что был добавлен последним.Как я могу сделать так, чтобы при нажатии кнопки ссылка на div изменялась.
Я пробовал использовать useRef и createRef.Поскольку я хочу создать новый экземпляр ref, я больше посмотрел на createRef, чем на useRef.Я также играл вокруг useEffect.Но мое решение не помогло мне решить мою самую большую проблему
Я создал небольшой проект, содержащий 3 компонента, которые помогут вам понять, что я пытаюсь объяснить.
У меня также есть база данных, содержащая фиктивные данные -> в моем реальном проекте это не проблема.Это массив, содержащий объекты.[{'id': '1', 'name': 'first'}, ...]
Main:
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, он выбирает только последний элемент.Я надеялся, что он найдет ту кнопку, на которую нажал.