Надо запустить проверку на выигрыш при клике на элемент
Есть небольшая игра на реакт. Найди пару карт. Если карточки совпали, то они становятся неактивными. Получается при клике на первую и вторую карточки они становится активными, но не отмечается как пара. И только после еще одного нажатия по полю игры они становятся неактивными и отмечаются парой. На каждую карточку добавлено событие по клику toggleClassCard. Как бы можно это исправить?
let cardsInfo = [
{ id: 1, number: 1, openStatus: false, successStatus: false },
{ id: 2, number: 1, openStatus: false, successStatus: false },
{ id: 3, number: 2, openStatus: false, successStatus: false }
]
const [cards, setCards] = useState(cardsInfo);
const [firstCard, setFirstCard] = useState(null);
const [secondCard, setSecondCard] = useState(null);
const setCardsInGame = (card) => {
if (firstCard == null) {
setFirstCard(card);
} else {
if (secondCard == null) {
setSecondCard(card);
}
}
};
const gameLogicToWin = () => {
if (firstCard !== null && secondCard !== null) {
if (firstCard.number === secondCard.number) {
setCards(
cards.map((card) => {
if (card.id === firstCard.id) {
return {
...card,
openStatus: false,
successStatus: true,
};
}
if (card.id === secondCard.id) {
return {
...card,
openStatus: false,
successStatus: true,
};
}
return card;
})
);
setFirstCard(null);
setSecondCard(null);
}
}
};
const toggleClassCard = (id) => {
setCards(
cards.map((card) => {
if (card.id === id) {
setCardsInGame(card);
if (card.successStatus === false) {
return { ...card, openStatus: !card.openStatus };
}
}
return card;
})
);
gameLogicToWin();
};
Источник: Stack Overflow на русском