我在usestate中有数组,并且我从函数更改了值但不起作用-反应本机钩子

时间:2020-05-01 04:05:56

标签: reactjs react-native react-hooks use-state

我对项目使用react native hooks但我有一个奇怪的错误 我在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 :(得分:0)

通过使用异步等待,可以解决此问题

 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);
}

答案 1 :(得分:0)

如果调用setLetters,它不是使字母变异,因此字母将在下一次渲染而不是在执行代码的下一行具有新值。它与设置器异步无关,而是因为当您使用状态设置器时,状态值变为stale closure

您可以执行以下操作:

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);
};