我对 React 比较陌生,正在开发 John Conway - Game of Life 应用程序。我Gameboard.js
为棋盘本身(它是 的子项App.js
)构建了一个Square.js
功能组件,以及代表棋盘中单个方块的功能组件(并且是 的子项Gameboard
和孙子App
)。
在App
我有一个调用的函数alive
,当用户单击它时,我想更改单个方块的颜色。App
也有一个 'alive' 属性,它的状态最初设置为 false,并alive
在调用时将该属性更改为 true。
这是App.js
:
import React, { Component } from 'react';
import './App.css';
import GameBoard from './GameBoard.js';
import Controls from './Controls.js';
class App extends Component {
constructor(props){
super(props);
this.state = {
boardHeight: 50,
boardWidth: 30,
iterations: 10,
reset: false,
alive: false
};
}
selectBoardSize = (width, height) => {
this.setState({
boardHeight: height,
boardWidth: width
});
}
onReset = () => {
}
alive = () => {
this.setState({ alive: !this.state.alive });
console.log('Alive function has been called');
}
render() {
return (
<div className="container">
<h1>Conway's Game of Life</h1>
<GameBoard
height={this.state.boardHeight}
width={this.state.boardWidth}
alive={this.alive}
/>
<Controls
selectBoardSize={this.selectBoardSize}
iterations={this.state.iterations}
onReset={this.onReset}
/>
</div>
);
}
}
export default App;
Gameboard
看起来像这样并将 props.alive 传递给Square
:
import React, { Component } from 'react';
import Square from './Square.js';
const GameBoard = (props) => {
return (
<div>
<table className="game-board">
<tbody>
{Array(props.height).fill(1).map((el, i) => {
return (
<tr key={i}>
{Array(props.width).fill(1).map((el, j) => {
return (
<Square key={j} alive={props.alive}/>
);
})}
</tr>
);
})}
</tbody>
</table>
</div>
);
}
export default GameBoard;
在我的 CSS 中,我有一个名为 active 的类,如果单击它,它会更改单个方块的颜色。我怎样才能使它在Square
单击 td 元素时颜色发生变化(即 CSS 类更改为活动)?
我试过这个:
import React, { Component } from 'react';
const Square = (props) => {
return(
<td className={props.alive ? "active" : "inactive"} onClick={() => props.alive()}></td>
);
}
export default Square;
CSS 看起来像这样:
.Square {
background-color: #013243; //#24252a;
height: 12px;
width: 12px;
border: .1px solid rgba(236, 236, 236, .5);
overflow: none;
&:hover {
background-color: #48dbfb; //#00e640; //#2ecc71; //#39FF14;
}
}
.inactive {
background-color: #013243; //#24252a;
}
.active {
background-color: #48dbfb;
}
我怎样才能使 .Square CSS 类始终应用于每个方块,但如果它处于活动状态,单个方块的颜色会改变?换句话说,我是否可以将Square
的 td设置为始终使用 .Square CSS 类进行样式设置,然后Square
可以根据 的状态是否alive
为真对其中的各个元素进行适当的着色App
?
是否有三元方法来始终设置一个特定的 CSS 类,然后另外设置 2 个其他类中的 1 个……即始终显示 Square CSS 类,并根据逻辑/状态呈现活动或非活动状态?