Вы не должны касаться DOM самостоятельно, это убило бы цель реакции
Вместо этого ваши слушатели событий должны быть выражены в вашем компоненте, и реакция будет обрабатывать их
внутренне, это означает, что реакция будет вызывать addEventListener и removeEventListener при необходимости среди других полезных опций
сначала ваши данные должны быть структурированы как вложенный массив
а затем отобразить ваши строки и ячейки
благодаря мощности Array.prototype.map у вас будет доступ к индексам строк и ячеек
rows.map((row, rowIndex) => (
<div>
{row.map((cell, cellIndex) => (
<div
onClick={() => {
console.log(`you clicked on ${rowIndex}, ${cellIndex}`)
}}
>
{cell}
</div>
))}
</div>
))
вот рабочий пример в codeandbox
https://codesandbox.io/s/6zw42m4pxw