React native 异步存储在应用程序重新加载时未持久化
我想知道你能否帮我弄清楚,当我使用异步存储在React Native中重新加载我的应用程序时,为什么我的数据无法持久化。以下是我的详细资料: React-Native.61.2/使用React-Native社区–在iOS上的XCode模拟器中进行异步存储/测试 当我最初设置数据并获取数据时,我得到了正确的响应。当我设置数据、重新加载应用程序并再次尝试获取数据时,返回字母“a” 以下是我设置数据的方式:React native 异步存储在应用程序重新加载时未持久化,react-native,asyncstorage,React Native,Asyncstorage,我想知道你能否帮我弄清楚,当我使用异步存储在React Native中重新加载我的应用程序时,为什么我的数据无法持久化。以下是我的详细资料: React-Native.61.2/使用React-Native社区–在iOS上的XCode模拟器中进行异步存储/测试 当我最初设置数据并获取数据时,我得到了正确的响应。当我设置数据、重新加载应用程序并再次尝试获取数据时,返回字母“a” 以下是我设置数据的方式: changeUsernameToLowercase = text => { va
changeUsernameToLowercase = text => {
var temp = text.toLowerCase();
this.setState({email: temp});
this._storeData('@email', temp);
};
async _storeData(name, value) {
try {
await AsyncStorage.setItem(name, value);
} catch (error) {
// Error saving data
console.log('FAILING: ' + error);
}
}
componentDidMount() {
this._retrieveEmail().then(response => {
console.log('My log:' + response); //returns letter a on reload
return response;
});
}
async _retrieveEmail() {
try {
var email = await AsyncStorage.getItem('@email');
console.log('MY EMAIL LOG:' + email); //returns letter a on reload
return email;
} catch (e) {
console.error(e);
}
}
下面是我的渲染中的JSX,它调用changeUsernameToLowercase:
<TextInput
onChangeText={text => this.changeUsernameToLowercase(text)}
placeholder="Email address"
value={this.state.email}
autoCapitalize="none"
type="password"
style={{
flex: 1,
backgroundColor: '#fff',
borderBottomColor: '#333',
borderBottomWidth: 1,
}}
/>
我可能误解了持久性存储是如何工作的,但我认为是这样的,所以数据会像重新加载一样持久化
感谢您的帮助 它应该像你期望的那样工作。尝试进行一些调试,例如添加
console.log('reading',wait AsyncStorage.getItem(name)
在您的\u storeData
功能中查看实际存储的内容当我添加读取/保存控制台日志时,我得到的结果与我在componentDidMount步骤中检索时得到的结果相同:当我通过登录步骤并存储然后检索我的电子邮件地址时,我可以检索它。当我在注册后重新加载我的应用程序时l已经登录(这并没有让我完成设置我的值的登录步骤,但我相信它应该仍然存在,因为持久存储),我得到了字母“a”。(我使用的电子邮件地址是1@2.com,因此与字母a无关。)我不明白tbh,“保存”和“读取”是否显示相同的内容?根据您提供的代码,每次在textinput中输入内容时都会显示保存,因此您应该通过每次击键输入的内容获得“读取”。是这样吗?是的,保存和读取显示相同的内容。您也正确地认为保存发生在eve当您点击登录屏幕时,请按ry键。以下是我的流程:(1)使用电子邮件/密码MongoDB Stitch登录。当我键入电子邮件时,它将其存储在异步存储中。(2)成功登录后,我被授予访问令牌并返回“已验证用户”对象,我使用它来更改我的应用程序的状态,以告诉它下次跳过登录屏幕。(3)此时,我正在手动重新加载iOS模拟器以测试异步存储。当它重新加载时,我执行Stitch上的“initializeDefaultAppClient”检查我是否登录。它返回经过身份验证的用户,这会导致我更改我的应用程序状态并跳过登录屏幕(因此此时我不会再次设置异步存储)。(4)尝试访问我在重新加载之前存储在异步存储中的电子邮件地址。返回字母“a”。