Saya telah membuat permainan Tic-Tac-Toe (dokumentasi REACT sendiri), sekarang saya mencoba mengubah beberapa fitur, dalam hal ini hal pertama yang saya ubah adalah bahwa pengguna dapat mengamati gerakan sebelumnya setelah permainan ...

1
Efe FRK 5 April 2021, 17:08

1 menjawab

Jawaban Terbaik

Ketika Anda memeriksa pemenang sementara itu harus menjadi pemenang, kuadrat masih belum diperbarui (this.handleClick memang mengubah keadaan tetapi perubahan itu sendiri tidak sinkron).

Saya akan merekomendasikan untuk memindahkan Pemenang Periksa ke Handler Klik

handleClick(i) {
  const history = this.state.history.slice(0, this.state.stepNumber + 1);
  const current = history[history.length - 1];
  const squares = current.squares.slice();
  if (squares[i]) {
    return;
  }
  squares[i] = this.state.xIsNext ? "X" : "O";
  this.setState({
    history: history.concat([
      {
        squares: squares
      }
    ]),
    stepNumber: history.length,
    xIsNext: !this.state.xIsNext,
    winner: calculateWinner(squares) // <-- this
  });
}

https://codesandbox.io/s/epic-sutherland-gj6d5?file=/src/app.js:1996-2028.

0
Mosh Feu 5 April 2021, 14:59