我有以下功能,并且有兩個警報。第一個 Alert 顯示的settingsChangedRoute是true,之后是setSettingsChanged(settingsChangedRoute);settingsChanged根據我的理解,該值也應該是真實的。但這是錯誤的,我不明白為什么。請幫助修復它,因為它應該是true。
const [settingsChanged, setSettingsChanged] = useState(false);
//...
const load = async () => {
if (!!(route?.params)) {
const settingsChangedRoute = route.params.settingsChanged;
Alert.alert(`settingsChangedRoute === ${settingsChangedRoute}`);
setSettingsChanged(settingsChangedRoute);
}
const savedMode = await AsyncStorage.getItem('mode');
if (!!savedMode) {
const savedBlocked = await AsyncStorage.getItem('blocked');
if (savedBlocked) {
setBlocked(JSON.parse(savedBlocked));
}
setMode(savedMode);
const savedTurn = await AsyncStorage.getItem('turn');
setTurn(savedTurn);
const savedFieldSize = await AsyncStorage.getItem('fieldSize');
const parcedFieldSize = JSON.parse(savedFieldSize);
setFieldSize(parcedFieldSize);
const savedDifficulty = await AsyncStorage.getItem('difficulty');
setDifficulty(savedDifficulty);
Alert.alert(`settingsChanged === ${settingsChanged}`);
if (settingsChanged) {
setInitialFieldState();
setSettingsChanged(false);
} else {
const fieldStateJSON = await AsyncStorage.getItem('fieldState');
if (!!fieldStateJSON) {
setFieldState(JSON.parse(fieldStateJSON));
}
}
} else {
setInitialFieldState();
}
}
uj5u.com熱心網友回復:
該useState()掛鉤異步更新值。因此,即使您在代碼執行到達第二個警報時將settingsChanged更新為 true,這些值仍未更改。因此,建議使用useEffect鉤子。
請參閱此檔案:https : //reactjs.org/docs/hooks-effect.html
useEffect(()=>{
// write code that will execute after settingsChanged has been updated
},[settingsChanged])
如果你只需要在settingsChanged值更新為 true時才執行代碼,你可以簡單地在 useEffect 中添加一個條件
useEffect(()=>{
if(settingsChanged) {
// write code that will execute after settingsChanged has been
// updated to true
}
},[settingsChanged])
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/402354.html
標籤:
上一篇:反應原生底片底部透明
