我对项目使用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]);
}
像这样
答案 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);
};