Существует много способов сделать это без прямой манипуляции с DOM.
У вас может быть компонент <Tile>
, который принимает логическое значение, если игрок присутствует и отображает по-другому если один из них:
function Tile({hasPlayer}) {
return <div className="col tile">
{hasPlayer ? <span className="dot1" /> : '*'}
</div>
}
Теперь вы можете создать строку типа:
<div className="row">
{[1,2,3,4,5].map(tileId => (
<Tile hasPlayer={tileId === playerPosition} />
)}
</div>
Или вы можете установить встроенные стили пешки, чтобы расположить пешку абсолютно.
CSS:
.pawn {
position: absolute;
transition: left 0.5s, top 0.5s; // smoothly move the pawn
}
Если вы знали, что плитки имеют определенный размер, скажем, 50 пикселей, вы могли бы тогда:
<span
className="pawn"
style={{
left: playerPosition.x * 50,
top: playerPosition.y * 50,
}}
/>
В общем Думайте о своей игре как о чистых данных. У вас просто есть состояние, позволяющее узнать о том, что происходит в игре. Тогда вы просто визуализируете это состояние.
Не думайте о перемещении вещей на веб-странице. Просто обновите данные, которые записывают состояние игры, а затем просто отобразите их.