私はリアクションを学び、チック・タック・トゥ・ゲームを構築しています。 私のコードは以下の通りです:私のSquare
コンポーネントでReact js this.setStateが正常に動作していません
var Square = React.createClass({
getInitialState: function() {
return { mark: this.props.mark,
clicks: 0
};
},
respondToClick: function() {
if(this.state.mark == '_') {
var nextClick = this.state.clicks + 1;
}
var newMark = nextClick%2 ? 'X' : 'O';
this.setState({mark: newMark, clicks: nextClick});
},
render: function(){
return (<button className="square" onClick={this.respondToClick}>
{this.state.mark}
</button>
);
}
});
var Board = React.createClass({
renderSquare: function(i) {
return (<Square mark='_' />);
},
getInitialState: function() {
return {
clicks: 0
};
},
changeValue: function(i, val) {
return (<Square value={val} />);
},
render: function() {
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>
);
}
});
var Game = React.createClass({
render: function() {
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('container')
);
私はrespondToClick
方法を持っていると私が持っているメソッド内:
this.setState({mark: newMark, clicks: nextClick});
まあ、何とかどちらのマークもクリックが更新されます。私はコールバックを使うことができましたが、私の場合、私はどのようにそれを行うことができません...だれでも助けてくれますか?
と関連性のない副作用として、今日のリアクションにはES6構文を使用することをお勧めします。私は[作成 - 反応 - アプリ](https://github.com/facebookincubator/create-react-app) – Dibesjr