我試圖更新setStars的值,即使條件為真也沒有更新。我不知道為什么
const [Stars, setStars] = useState(0)。
if (passedData === 'part 1' && CurrentQuestion ==QuestionData. length - 1) {
if (score >= 1 & & score <= 2) {
setStars(10)。
alert(Stars)。
let PartOne = JSON.stringify(Stars)。
AsyncStorage.setItem('Part1', PartOne) 。
}
if (score >= 3 & & score <= 4) {
setStars(20)。
let PartOne = JSON.stringify(Stars)。
AsyncStorage.setItem('Part1', PartOne) 。
}
uj5u.com熱心網友回復:
在設定Stars值(setStars(10))后,不要使用alert來列印變化。alert不會列印立即改變的值。相反,在if條件之后嘗試 console.log(Stars)。你會看到這些變化。
const [Stars, setStars] = useState(0) 。
if (passedData === 'part 1' && CurrentQuestion ==QuestionData. length - 1) {
if (score >= 1 & & score <= 2) {
setStars(10)。
let PartOne = JSON.stringify(Stars)。
AsyncStorage.setItem('Part1', PartOne) 。
}
if (score >= 3 & & score <= 4) {
setStars(20)。
let PartOne = JSON.stringify(Stars)。
AsyncStorage.setItem('Part1', PartOne) 。
}
}
console.log(Stars)。
uj5u.com熱心網友回復:
問題是setStars是一個異步函式,即下面的代碼將繼續執行,而不能保證Stars的值已經改變。
為了達到你想要的效果,你可以在一個變數中保留你要設定的值:
const newStarValue =10
setStars(newStarValue)。
let PartOne = JSON.stringify(newStarValue)。
AsyncStorage.setItem('Part1', PartOne) 。
或者(更好)使用一個useEffect鉤子來查看setStars完成后的值:
useEffect(() =>/span> {
let PartOne = JSON.stringify(Stars)。
AsyncStorage.setItem('Part1', PartOne) 。
}, [Stars])。)
uesEffect鉤子更加穩健,因為只要Stars的值發生變化,它就會運行
。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/332298.html
標籤:
