【发布时间】:2020-02-06 07:54:14
【问题描述】:
我对 ReactJS 比较陌生,我对 setState 有一些问题。
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import './index.js';
class Square extends React.Component {
constructor(props) {
super(props);
this.state = {
value: null,
xNextPlayer: true
};
}
render() {
return (
<button
className="square"
onClick={ async () => {
console.log(this.state.xNextPlayer);
if(this.state.xNextPlayer === true) {
this.setState({value: 'X'});
} else {
this.setState({value: 'O'});
}
await this.setState({xNextPlayer: !this.state.xNextPlayer});
console.log(this.state.xNextPlayer);
}}
>
{this.state.value}
</button>
);
}
}
class Board extends React.Component {
renderSquare(i) {
return <Square />;
}
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>
);
}
}
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')
);
**strong text**
现在的问题是 xNextPlayer 没有正确更新。 当我第一次点击时,xNextPlayer 应该是真的。然后我想将其设置为false。它正确地执行此操作并且控制台记录为假。但是当我再次单击时,它再次设置回true。那么第一个控制台日志为真,第二个为假。
但我想存储值并为假。
有人有解决办法吗?
【问题讨论】:
标签: reactjs react-native setstate