マップ関数を使用してオブジェクトの配列からゲームボードを作成し、クリック時にsetStateを呼び出してゲームを実行します。私はsuccessfuly状態を更新することができますが、私は別のアクションを実行するまで、ビューは更新されません。私は、マップ関数がどのように子要素(Cell)に小道具を渡すかに問題があると推測していますが、私が間違っていることを理解することはできません。reactjs - 状態を変更してもコンポーネントが再描画されない
var board = [];
var width = 50;
var height = 30;
var size = width * height;
for (var i=1; i<=size; i++) {
board[i] = {id: i, status: 'dead'};
}
var Cell = React.createClass({
turn: function() {
this.props.turn(this.props.id);
},
render: function() {
return <div id={this.props.id} className={this.props.status} onClick={this.turn}></div>
}
});
var GameBoard = React.createClass({
getInitialState: function() {
return {
board: board
};
},
handleClick: function(id) {
var newBoard = this.state.board;
newBoard[id] = {id: id, status: 'alive'};
this.setState({board: newBoard});
},
move: function() {
var board = this.state.board;
var newBoard = board;
for (var j=1;j<=board.length;j++) {
if (board[j].status == 'alive') {
newBoard[j-1] = {id: j-1, status: 'alive'};
newBoard[j] = {id: j, status: 'dead'};
}
}
this.setState({board: newBoard});
},
render: function() {
var squares = this.state.board.map(function(item){
return <Cell id={item.id} status={item.status} turn={this.handleClick}/>
}.bind(this));
return (
<div>
<h1>Game of Life</h1>
<button className="btn btn-default" onClick={this.move}>Run</button>
<div className='boardContainer'>{squares}</div>
</div>
);
}
});
ReactDOM.render(<GameBoard/>,document.getElementById('app'));
http://codepen.io/Theeeus/pen/YpQzPO?editors=0010
Thanks Sam!ループを変更すると、すでにエラーが修正されていますが、状態に変数を割り当てることによっても状態に影響を与えることは考えられませんでした。私は将来的に問題を避けるためにその部分を修正するつもりです。 –