我目前正在嘗試在 React-Native 的 onPress 事件中更改狀態的方法,但運氣不佳。當有人按下“更改狀態?” 召喚警報中的選項,我想將狀態更改為true. 但是,當呼叫setState()或useCallback()切換狀態時,它會繼續列印錯誤列印(兩次)。
僅供參考:我將警報稱為ExampleAlert()而不是<ExampleAlert />在我的代碼中的其他地方。
這個問題是否與警報在 RN 中的撰寫方式有關,或者與警報不會觸發重新渲染的事實有關?
const [state, setState] = useState(false);
const changeStateCallback = useCallback(() => {
setState(!state);
}, [state]);
const ExampleAlert = () => {
Alert.alert(
'Title',
'Message',
[
{
text: 'Change State?',
onPress: () => {
changeStateCallback;
console.log(state);
setState(true);
console.log(state);
},
},
{
text: 'OK',
onPress: () => {},
},
],
);
return null;
};
uj5u.com熱心網友回復:
useState 是異步的,在同一個環境下是看不到變化的
所以你只需要這樣做:
onPress: () => {
setState(true);
},
或者
const handlePress =()=>{
setState(true);
}
onPress: () => { handlePress },
這個語法() => { }還沒有執行,當用戶點擊它時它會執行。
編輯1:
const handlePress =()=>{
setState(true);
console.log(state) // here you can not see the change
}
console.log(state) //put your console outside of handlePress to see the change
uj5u.com熱心網友回復:
我想我知道你的問題。
console.log()是一個同步函式,setState()是一個異步函式,在當前呼叫堆疊中的所有內容完成運行之前,稱為異步代碼不會運行。
直到稍后您才會看到狀態的變化。
您是否嘗試過使用除錯工具可視化狀態?
類似問題:setState() 之后的 Console.log() 不回傳更新的狀態
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/347857.html
標籤:javascript 反应原生 警报
