javascript - 为什么按钮在点击时改变位置?
问题描述
我正在使用 React Hook 构建井字游戏。当井字游戏正常工作时,按钮在点击时会改变位置。图1是初始游戏板,图2是点击按钮后!它正在下降。如果我连续点击三个按钮,它会转到上一个位置(图 3)。
井字形
我不希望按钮改变位置。
我的代码如下:
import React, {useState} from 'react';
import Square from './Square';
function Board(){
const [boardSquares, setBoardSquares] = useState(Array(9).fill(null));
const [xIsNext, setXIsNext] = useState(true);
const handleClick = index =>{
const squares = [...boardSquares];
if( whoIsTheWinner(boardSquares) || squares[index]) return;
squares[index] = xIsNext ? "X" : "O";
setBoardSquares(squares);
setXIsNext(!xIsNext);
};
const renderSquare = (index) => {
return <Square value={boardSquares[index]} onClick={()=>handleClick(index)}/>
};
let status ;
const winner = whoIsTheWinner(boardSquares);
status = winner ?
`Winner is: ${winner}` :
`Next player: ${xIsNext ? "X" : "O"}`;
function whoIsTheWinner(squares){
const winningLine = [
[0, 1, 2],
[0, 3, 6],
[0, 4, 8],
[1, 4, 7],
[2, 5, 8],
[3, 4, 5],
[6, 7, 8],
[0, 4, 8]
];
console.log(winningLine)
for (let i=0; i < winningLine.length; i++){
const [a,b,c]=winningLine[i];
if (squares[a] && squares[a] === squares[b] && squares[b]===squares[c])
return squares[a];
}
return null;
};
return(
<div>
<div>
{status}
</div>
<div>
{renderSquare(0)}
{renderSquare(1)}
{renderSquare(2)}
</div>
<div>
{renderSquare(3)}
{renderSquare(4)}
{renderSquare(5)}
</div>
<div>
{renderSquare(6)}
{renderSquare(7)}
{renderSquare(8)}
</div>
</div>
);
}
export default Board;
CSS代码是:
.button {
width: 150px;
height: 150px;
background-color: greenyellow;
margin: 0;
padding: 0;
}
.button:active {
background-color: grey;
}
.button:hover {
background-color: palegreen;
}
解决方案
由于按钮中的文本为空,我也遇到了这个麻烦并将其范围缩小。如果按钮文本不为空,则单击后按钮位置不会移动,原因我仍然不明白。
问题的解决方法:
function Board(){
....
....Array(9).fill("\0"));
....
推荐阅读
- python - 在 Python 中创建继承类的问题(递归错误)
- sql - 用sql写一个查询公司有100名员工在那100名员工中加入了第一个员工
- kubernetes-helm - helm3:在 Chart.yaml 中,对于具有“rc”的版本,semVersion 比较失败
- laravel - 路线 [product.status] 未定义
- c# - C# NPOI 如何从单元格值中获取单元格地址(“A1”、“CY100”、...)
- node.js - Google Calendar API 获取当天 node.js 的事件
- c# - WPF MenuItem Click 事件被调用两次而不是一次
- java - 是否可以只创建一个规则但适用于 SonarQube 中的所有语言
- ios - 无法在作为子视图添加到 UIViewController 中的 UIView 中显示 UITableView 和 UITableViewCell
- javascript - (x === y) || 等条件的简写 (x === z)?