JSFiddle - React, Tailwind, and code Playground

HTML

<div id="table_content"></div>

CSS

body {
  padding: 50px;
  font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
}

a {
  color: #00B7FF;
}

.open {
    background-color: #FFF;
}
.loose td {
    background-color: #C0C0C0;
}
#table_content {
    padding: 10px;
}
.color_revers td {
    background-color: #000;
}
.color_revers td.fill_black {
    background-color: #FFF;
}
tr {
    border-color: #FFF;
}
td {
    background-color: #00F;
    width: 25px;
    height: 25px;
}
table {
    border: 1px solid black;
    text-align: center;
}

JavaScript

function createNode(name, klasses) {
    var n = document.createElement(name);
    n.className = klasses;
    return n;
}

function l(x) {
    console.log(x);
}

function hasClass(node, klass) {
    if (!('className' in node)) {
        return false;
    }
    return node.className.split(' ').indexOf(klass) > -1;
}

function addClass(node, klass) {
    if (!hasClass(node, klass)) {
        node.className += ' ' + klass;
    }
}

function removeClass(node, klass) {
    if (hasClass(node, klass)) {
        node.className = node.className.split(klass).join('');
    }
}

/**
 * Добавить или удалить класс
 * @param node
 * @param klass
 */
function toggleClass(node, klass) {
    (hasClass(node, klass)) ? removeClass(node, klass): addClass(node, klass);
}

/**
 * Создать таблицу
 * @param columnCount
 * @param rowCount
 * @returns {HTMLElement}
 */
function create_table(columnCount, rowCount) {
    var target = document.getElementById('table_content');
    var table = document.createElement('table');
    table.id = 'table';
    for (var i = 0; i < rowCount; i++) {
        var row = document.createElement('tr');
        for (var j = 0; j < columnCount; j++) {
            var column = document.createElement('td');
            row.appendChild(column);
        }
        table.appendChild(row);
    }
    target.appendChild(table);
    return table;
}

/**
 * Модель игры.
 * @param column
 * @param row
 * @param mineCount
 * @property array mineField  модель игрового поля
 * @constructor
 */
function Sapper(column, row, mineCount) {
    var table = create_table(column, row);
    var rows = table.childNodes;
    var tableModel = [];
    for (var rowIndex = 0; rowIndex < row; rowIndex++) {
        tableModel[rowIndex] = [];
        var columns = rows[rowIndex].childNodes;
        for (var columnIndex = 0; columnIndex < column; columnIndex++) {
            tableModel[rowIndex][columnIndex] = new Cell(columns[columnIndex], columnIndex, rowIndex);
        }
    }
    for (var i =...