у меня есть массив внутри usestate, и я изменил значение из функции, но не работает - реагировать на родные хуки - PullRequest
0 голосов
/ 01 мая 2020

я использую реагирующие нативные хуки для проекта, но у меня странная ошибка, у меня есть массив внутри usestate, и я изменил значение из функции после этого, я хочу использовать значение массива из другой функции, но это старое значение

  const addscore=()=>{
    setletters(letters=>letters.filter(item => item.letter != letters[0].letter));
    let randomnumber= Math.floor(Math.random() * letters.length);
    if(randomnumber!=0){
        randomnumber--;
    }
    setarrnumber(randomnumber);
    upplevel(randomnumber);
    setcounter(counter => counter+10);
}





 const upplevel=(index=arrnumber)=>{
    let answers=[];
    answers.push(letters[index][1]);

    console.log(arrnumber);
    // console.log(answers);
    setoption1(answers[0]);

}

как этот

Ответы [ 2 ]

0 голосов
/ 01 мая 2020

Если вы вызываете setLetters, это не мутирующие буквы, поэтому у букв будет новое значение при следующем рендере, а не на следующей строке исполняемого кода. Это не имеет ничего общего с тем, что установщик является асинхронным c, но потому, что когда вы используете установщик состояний, значением состояния становится устаревшее закрытие

Вы можете сделать что-то вроде этого:

const addscore = () => {
  const newLetters = letters.filter(
    (item) => item.letter !== letters[0].letter
  )
  setletters(newLetters);
  let randomnumber = Math.floor(
    Math.random() * newLetters.length
  );
  if (randomnumber != 0) {
    randomnumber--;
  }
  setarrnumber(randomnumber);
  upplevel(randomnumber);
  setcounter((counter) => counter + 10);
}; 
0 голосов
/ 01 мая 2020

Используя asyn c await, вы можете решить эту проблему

 const addscore=async()=>{
   await setletters(letters=>letters.filter(item => item.letter != 
   letters[0].letter));
   let randomnumber= Math.floor(Math.random() * letters.length);
   if(randomnumber!=0){
      randomnumber--;
   }
  setarrnumber(randomnumber);
  upplevel(randomnumber);
  setcounter(counter => counter+10);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...