class Square extends React.Component {
render() {
return {
<button
className="square"
onClick={() => this.props.onClick()}
>
{this.props.value}
</button>
};
}
}
class Board extends React.Component {
constructor(props) {
super(props);
this.state = {
squares: Array(9).fill(null)
};
}
handleCkick(i) {
const squares = this.state.squares.slice(); //객체 복사본
squares[i] = 'X';
this.setState({squares: squares});
}
renderSquare(i) {
return (
<Square
value={this.state.squares[i]}
onClick={() => this.handleClick(i)}
/>
);
}
render() {
const status = 'Next player: X';
return (
<div>
<div className="status">{status}</div>
<div className="board-row">
{this.renderSquare(0)}{this.renderSquare(1)}{this.renderSquare(2)}
</div>
<div className="board-row">
{this.renderSquare(3)}{this.renderSquare(4)}{this.renderSquare(5)}
</div>
<div className="board-row">
{this.renderSquare(6)}{this.renderSquare(7)}{this.renderSquare(8)}
</div>
</div>
);
}
}
const squares = this.state.squares.slice(); //객체 복사본
기존 배열을 바로 수정하는 것이 아니라 .slice() 연산자를 사용해 사본을 만들었다.
기존 데이터를 변경하지 않았을 때의 이점