Разработка приложения React, основная функция которого - показывать каждое слово предложения в пределах временного интервала, предварительно установленного пользователем (в основном, быстрое чтение). Я добился этого несколько дней назад, но теперь я пытаюсь реализовать кнопку паузы (чтобы приостановить цикл и получить фактическое слово) и застрял.
Я решил добавить кнопку «Пауза», которая вызывает функцию, которая устанавливает состояние паузы в значение «истина», и внутри моего цикла, если это состояние паузы имеет значение «истина», он выходит из цикла. Но проблема в том, что этот цикл не обнаруживает изменения, у меня есть console.log в строке 18, который всегда регистрирует ложь, хотя я уже нажал кнопку паузы и изменил состояние на 'false' (и это работает потому что я также регистрирую его в useEffect и его loggin 'true')
Итак, мой вопрос: как я могу это решить? Я неправильно использую перехватчики реакции?
Пример кода:
const [time, setTime] = React.useState('500')
const [pause, setPause] = React.useState(false)
const go = async function(){
let textarray = text.split(' ') //I split my text
for(let i = 0; i < textarray.length; i++){
console.log(pause) //This keeps logging false although the change in pauseButton function
if(pause){
//Get the actual word => i
break;
}
else{
setValue(textarray[i]) //Show the actual word
await timeout(time) //Wait the time
}
}
}
const pauseButton = function(){
setPause(true)
}
function timeout(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}