Примерно так...
<html>
<head>
<title></title>
<style type="text/css">
.cell{
height: 50px;
width: 50px;
background-color: #FFFF00;
}
.game > div {
width: 250px;
display: flex;
flex-wrap: wrap;
}
</style>
</head>
<body>
<div id="root"></div>
<script crossorigin src="https://unpkg.com/react@16/umd/react.production.min.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.25.0/babel.min.js"></script>
<script type="text/babel">
const { createElement, Component } = React;
class Game extends Component {
state = {
randomCell: null,
greenCells: []
}
duel = Array.from(new Array(25), (_, i) => i);
setGreen = () => {
this.setState({
randomCell: null,
greenCells: this.state.greenCells.concat(this.state.randomCell)
});
};
numRandom = () => {
const randomCell = Math.floor(25 * Math.random());
this.setState({ randomCell });
};
render() {
const { randomCell, greenCells } = this.state;
return <div className="game">
<div>
<button onClick={this.numRandom}>Play</button>
</div>
<div>{
this.duel.map(i => {
const style = {};
if(greenCells.includes(i))
style.backgroundColor = "green";
if(randomCell === i)
style.backgroundColor = "blue";
return <div
className="cell"
style={style}
onClick={randomCell === i ? this.setGreen : null}
></div>
})
}</div>
</div>
}
}
ReactDOM.render(<Game />, document.getElementById("root"))
</script>
</body>
</html>