[英]Why the state is not changed
我有以下function,有两个Alerts。 第一个 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();
}
}
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])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.