所以在我的應用程式中,我的按鈕應該設定我的資料,然后導航到下一頁。這里的問題是資料更新得不夠快(我認為)。控制臺顯示空值(這是我設定的初始資料),然后導航到帶有空值資料的下一頁。如果我回到上一頁然后再去下一頁,它會攜帶之前沒有發送過的資料。我嘗試過 setTimeout,但我想這是使用 setTimeout 的錯誤方式。
const [foto, setFoto] = useState(null);
const sendQUtest = () => {
setFoto('QUtest');
setTimeout(() => {
console.log('assessmentTimeout: ' foto);
}, 5000);
console.log('assessment: ' foto);
navigator.navigate('pembayaranAssessment', foto);
};
const sendTOPtest = () => {
setFoto('TOPtest');
console.log('assessment: ' foto);
navigator.navigate('pembayaranAssessment', foto);
};
不知道有沒有辦法等資料。我在其他問題中看到的解決方案是使用 useEffect,但在這個問題中,我在 onPress 之后需要它。
uj5u.com熱心網友回復:
usestate 是異步的,你不能真正為它創建一個 await 函式有兩種方法,其中一種是使用如下所示的 useEffect鉤子,你可以在一個函式中使用多個 useEffect 來檢查值何時發生變化,然后導航
const [foto, setFoto] = useState(null);
useEffect(()=>{
//this will fire at the beginning and on foto changing value
if(foto == null){
//will ignore first run
}else{ navigator.navigate('pembayaranAssessment', foto);
}},[foto])
const sendQUtest = () => {
setFoto('QUtest');
setTimeout(() => {
console.log('assessmentTimeout: ' foto);
}, 5000);
console.log('assessment: ' foto);
//navigator.navigate('pembayaranAssessment', foto);
};
const sendTOPtest = () => {
setFoto('TOPtest');
console.log('assessment: ' foto);
// navigator.navigate('pembayaranAssessment', foto);
};
uj5u.com熱心網友回復:
是的 setstate 需要一些時間來更新,您可以直接將資料發送到您的導航功能
navigator.navigate('pembayaranAssessment', 'TOPtest');
uj5u.com熱心網友回復:
試試這個方法
const sendQUtest = () => {
setFoto('QUtest');
setTimeout(() => {
navigator.navigate('pembayaranAssessment', foto); // add here
}, 200);
};
const sendTOPtest = () => {
setFoto('TOPtest');
setTimeout(() => {
navigator.navigate('pembayaranAssessment', foto); // add here
}, 200);
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/359921.html
標籤:javascript 反应原生 使用状态
