嗨,我的組件中有一個開關,它將根據值顯示登錄方法 true or false
如果為真,登錄圖示將顯示,如果為假則不顯示。
操作在設定頁面進行。
所以我在設定頁面做了一個切換按鈕。我正在使用異步存盤,因為如果用戶打開按鈕,我想保存資料。
這是設定頁面中的內容
const toggleSwitch = async () => {
await AsyncStorage.setItem('enableBiometric', isEnabled.toString());
setIsEnabled(!isEnabled);
};
const printSomething = async () => {
try {
const value = await AsyncStorage.getItem('enableBiometric');
console.log(value);
} catch (err) {
console.log(err);
}
};
return (
<View>
<View style={styles.button}>
<Text>Turn on Biometric Login</Text>
<Switch
trackColor={{false: switchDefaultColor, true: primaryColor}}
thumbColor={isEnabled ? '#ffffff' : '#f4f3f4'}
ios_backgroundColor={switchDefaultColor}
onValueChange={toggleSwitch}
value={isEnabled}
/>
</View>
<TouchableOpacity onPress={() => printSomething()}>
<Text>Text</Text>
{isEnabled ? <Text>Enabled</Text> : <Text>DisEnabled</Text>}
</TouchableOpacity>
</View>
)
發生的事情是當組件加載時,按鈕狀態的先前狀態是從異步存盤加載的。
但是在撥動開關的前 2 或 3 次期間。只有 的 Ui 變化 <Text>Enabled</Text> or <Text>DisEnabled</Text>。存盤資料不會改變。
例如場景
當組件加載時,應用程式從存盤中獲取資料。開關是on。當我按下 printSomething 按鈕時,它會說on.
當我第一次按下開關時。開關 UI 將關閉。但是當我按下 printSomething 按鈕時,它仍然會on。
它總是發生。
uj5u.com熱心網友回復:
enableBiometric需要AsyncStorage在渲染 ui 之后首先加載在
toggleSwitch功能上,isEnabled兩個setIsEnabled& 的值都需要相同AsyncStorage.setItem
僅供參考:“單一事實來源”是什么意思?
https://snack.expo.dev/@hashtd/cranky-milkshake
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/318793.html
標籤:javascript 反应 反应原生 异步 android-asynctask
