gpt4 book ai didi

javascript - 如何单独渲染子组件的样式?

转载 作者:太空宇宙 更新时间:2023-11-04 08:13:23 26 4
gpt4 key购买 nike

我正在浏览 React.js 网站上的 React 教程(井字游戏),我想在用户单击时分别设置每个方 block 的样式。更具体地说,当轮到玩家 X 时,方 block 应该变成红色并在轮到玩家 O 时变为蓝色。我试过使用 Prop 和状态来改变颜色。但是,React 会更改所有方 block ,而不是单独更改方 block 的颜色。

以下是我到目前为止尝试过的内容。

import React from 'react';
import ReactDOM from 'react-dom';

function Square (props) {

let style={
backgroundColor:props.bgColor,
background:'#fff',
border: '1px solid #999',
float: 'left',
fontSize: '24px',
fontWeight: 'bold',
lineHeight: '34px',
height: '34px',
marginRight:'-1px',
marginTop: '-1px',
padding: 0,
textAlign:'center',
width: '34px'

}
return (
<button className="square" style={style}onClick={props.onClick} >
{props.value}
</button>
);

}

class Board extends React.Component {
constructor() {
super();

this.state = {
squares: Array(9).fill(null),
xIsNext:true,
color:'white'
};
}

handleClick=(i)=>e=> {
const squares = this.state.squares.slice();

if(calculateWinner(squares) ||squares[i]){
return;
}
squares[i] = this.state.xIsNext?'X':'O';

this.setState({squares: squares,
xIsNext:!this.state.xIsNext});
}

renderSquare(i) {
return (
<Square
value={this.state.squares[i]}
onClick={ this.handleClick(i)}
bgColor={this.state.xIsNext?'red':'blue'}
/>
);
}

render() {
const winner = calculateWinner(this.state.squares);
let status;
if(winner){
status ="Winner: "+winner;
}else{
status = 'Next player: '+(this.state.xIsNext?'X':'O');
}
let boardStyle={
clear: 'both',
content: "",
display: 'table'
}
return (

<div>
<div className="status">{status}</div>
<div className="board-row" style={boardStyle}>
{this.renderSquare(0)}
{this.renderSquare(1)}
{this.renderSquare(2)}
</div>
<div className="board-row" style={boardStyle}>
{this.renderSquare(3)}
{this.renderSquare(4)}
{this.renderSquare(5)}
</div>
<div className="board-row" style={boardStyle}>
{this.renderSquare(6)}
{this.renderSquare(7)}
{this.renderSquare(8)}
</div>
</div>
);
}
}

class Game extends React.Component {
render() {

return (
<div className="game">
<div className="game-board">
<Board />
</div>
<div className="game-info">
<div>{/* status */}</div>
<ol>{/* TODO */}</ol>
</div>
</div>
);
}
}
// ========================================
ReactDOM.render(
<Game />,
document.getElementById('root')
);

function calculateWinner(squares){
const lines =[
[0,1,2],
[3,4,5],
[6,7,8],
[0,3,6],
[1,4,7],
[2,5,8],
[0,4,8],
[2,4,6]
];

for(let i = 0;i<lines.length;i++){
const [a,b,c] = lines[i];
if (squares[a] && squares[a] === squares[b] && squares[a] === squares[c]) {
return squares[a];
}
}
return null;

}

最佳答案

您可以根据自己的值(value)决定每个方 block 内的背景颜色。如果是“X”,则将其标记为红色;如果是“O”,则将其标记为蓝色。

let style={
backgroundColor: {props.value === 'X' ? 'red' : 'blue'},

关于javascript - 如何单独渲染子组件的样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46087547/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com