Есть доска с квадратами, их значение зависит от массива, это обрабатывается с помощью хука useState
. Каждый щелчок должен повышать значение на единицу, но, к сожалению, он увеличивает его на два (кроме первого щелчка).
Мои вопросы:
(1) Почему это происходит, (2) как этого избежать и, в целом, (3) есть ли лучший способ обработать такой массив с помощью крючков.
let emptyBoard = Array.from({ length: parseInt(props.rows, 10) }, () =>
new Array(parseInt(props.columns, 10)).fill(0)
);
const [squaresValues, setSquaresValue] = useState(emptyBoard);
function onClick(id) {
const [rowIndex, cellIndex] = id;
console.log("the " + id + " square was clicked");
setSquaresValue(prevValues => {
let newBoard = [...prevValues];
console.log("before: " + newBoard[rowIndex][cellIndex]);
newBoard[rowIndex][cellIndex] = newBoard[rowIndex][cellIndex] + 1;
console.log("after: " + newBoard[rowIndex][cellIndex]);
return newBoard;
}
);
}
Журнал:
the 3,0 square was clicked
before: 0
after: 1
the 3,0 square was clicked
before: 1
after: 2
before: 2
after: 3
Как видно, при втором щелчке значение увеличивается дважды при каждом щелчке.