#reactjs
#reactjs
Вопрос:
Я пытаюсь получить всплывающее предупреждение после розыгрыша определенного количества карт, но при попытке использовать обратный вызов в setState предупреждение появляется до того, как произойдет рендеринг.
checkWin() {
if (cards[Object.keys(cards)[12]].number === 0) {
alert("GAME OVER");
}
}
drawCard() {
let cardNumber;
do {
cardNumber = Math.floor(Math.random() * (Object.keys(cards).length));
}
while (cards[Object.keys(cards)[cardNumber]].number === 0);
var card = cards[Object.keys(cards)[cardNumber]];
card.number = card.number - 1;
console.log()
this.setState({
card: card.images[card.number 1],
total: this.state.total -1,
description: card.description
}, this.checkWin());
}
Я попытался поместить функцию в обратный вызов, и она тоже не работает.
редактировать: предупреждение появляется перед отображением новой карты
он работает по назначению, изменив checkWin() на это:
if (cards[Object.keys(cards)[12]].number === 0) {
setTimeout(function(){
alert("GAME OVER");
}, 500);
}
Комментарии:
1. что вы подразумеваете под «до того, как произойдет рендеринг»?
2. предупреждение появляется перед изменением экрана, чтобы показать новую карту, которая изменяется в setState
3. Вы вызываете функцию во время выполнения. Измените его на this в обратном вызове:
}, () => this.checkWin());
Ответ №1:
вы неправильно выполняете функцию обратного вызова. попробуйте это
this.setState({
card: card.images[card.number 1],
total: this.state.total -1,
description: card.description
}, () => this.checkWin() ); ///-> see here
Комментарии:
1. Уже пробовал это, он все равно появляется перед рендерингом
2. рендеринг занимает некоторое время. вы можете отложить всплывающее окно на 100 мс