Вы можете легко решить эту проблему несколькими способами, но, во-первых, у вас не должно быть нескольких элементов с одинаковым идентификатором. Поскольку у вас уже есть id="Box"
для заголовка, я бы предложил сгенерировать остаток с индексами:
<SubHeroContainer>
{[...Array(n)].map((e, i) => (
<SubHeroBox key={i}>
<Box2 id={`box-${i}`} />
<button onClick={() => handleChangePos(i)}>Move Box</button>
</SubHeroBox>
))}
</SubHeroContainer>
Затем вы можете изменить handleChangePos
, чтобы принять параметр (индекс) и найти данный элемент:
const handleChangePos = (index) => {
let box = document.getElementById(index ? `box-${index}` : "box");
box.style.transform = `translateY(-20px)`;
};
Чтобы избежать передачи индекса, вы также можете использовать event.target.name
из события, переданного кнопками при нажатии на них, и объявить кнопку как <button onClick={handleChangePos} name={i} >Move Box</button>
, но она почти такая же.
Я бы также предложил не использовать идентификаторы, а вести список refs
и изменять их на основе индекса. Вы можете прочитать больше о ссылках здесь: https://reactjs.org/docs/refs-and-the-dom.html