Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
React native 异步存储在应用程序重新加载时未持久化_React Native_Asyncstorage - Fatal编程技术网

React native 异步存储在应用程序重新加载时未持久化

React native 异步存储在应用程序重新加载时未持久化,react-native,asyncstorage,React Native,Asyncstorage,我想知道你能否帮我弄清楚,当我使用异步存储在React Native中重新加载我的应用程序时,为什么我的数据无法持久化。以下是我的详细资料: React-Native.61.2/使用React-Native社区–在iOS上的XCode模拟器中进行异步存储/测试 当我最初设置数据并获取数据时,我得到了正确的响应。当我设置数据、重新加载应用程序并再次尝试获取数据时,返回字母“a” 以下是我设置数据的方式: changeUsernameToLowercase = text => { va

我想知道你能否帮我弄清楚,当我使用异步存储在React Native中重新加载我的应用程序时,为什么我的数据无法持久化。以下是我的详细资料:

React-Native.61.2/使用React-Native社区–在iOS上的XCode模拟器中进行异步存储/测试

当我最初设置数据并获取数据时,我得到了正确的响应。当我设置数据、重新加载应用程序并再次尝试获取数据时,返回字母“a”

以下是我设置数据的方式:

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”。