二重ループを使うとなるとfor文を使いたいので、JSXの中(returnの内側)ではなく、returnより前で作りたいですね。ループという重い処理なので

useMemo

を使って以下のように実装してあげましょう

const rows = useMemo(() => {
  const _rows = []
  // discsという配列分だけ行を作ると仮定
  // <tr>内のループはmapを使ってます
  for (let i=0; i < discs.length; i++) {
    _rows.push(
      <tr>
        {[0,1,2,3].map(j => (
          <td><Disc info={boardInfo(i, j)} /></td>
        )}
      </tr>
    )
  }
  return _rows
},[discs])
return (
  <table>
    <tbody>
      {rows}
    </tbody>
  </table>
)