我正在学习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')
);
在我Square
组件我有respondToClick
方法和方法内我有:
this.setState({mark: newMark, clicks: nextClick});
嗯,不知何故没有标志,也没有点击得到更新。我可以使用回调,但在我的情况下,我不明白我该怎么做...任何人都可以请帮忙吗?
作为一个无关的侧面说明,建议现在使用ES6语法进行反应。我会检查[创建 - 反应 - 应用程序](https://github.com/facebookincubator/create-react-app) – Dibesjr