React Native:成功登录后将电子邮件数组存储在 AsyncStorage 中

React Native: store array of emails in AsyncStorage after successful login

我正在尝试在我的异步存储中存储一组电子邮件地址。将其视为“最近使用的帐户”以加快在多个用户使用的设备上的登录速度

这是我目前所知道的 - 这在用户成功登录后被调用:

const storeEmail = async (email) => {
    try {
      const jsonValue = JSON.stringify(email);
      await AsyncStorage.setItem("storedEmails", jsonValue);
    } catch (e) {
      alert(e);
    }
};

我的问题是它只存储一封电子邮件。如何在其中存储一组电子邮件,而不是单个电子邮件?

我还需要避免重复,因此需要检查电子邮件地址是否已存在于数组中?

您可以推送数组数据,如下所示。最初你可以获取数据,如果它是空的,那么你可以初始化空数组并将数据推入其中。如果它有数据,您可以附加唯一的电子邮件 ID:

    const storeEmail = async (email) => {
        try {
            let emailStored = await AsyncStorage.getItem("storedEmails");
            if(emailStored == null || emailStored == undefined){ 
                emailStored = [];
                emailStored = JSON.stringify(emailStored)
            }
            let emails = JSON.parse(emailStored);
            if (emails.indexOf(email) == -1) {
                emails.push(email);
            }
            const jsonValue = JSON.stringify(emails);
            await AsyncStorage.setItem("storedEmails", jsonValue);
        } catch (e) {
            alert(e);
        }
    };

对于AsyncStorage存储一些复杂类型的数据结构,如数组、对象等集合,推荐您使用react-native-easy-app,可以帮助您解决这些烦人的数据转换操作,并且可以还同步读写数据存储。

  import { XStorage } from 'react-native-easy-app';
  import { AsyncStorage } from 'react-native';
  // or import AsyncStorage from '@react-native-community/async-storage';

   export const RNStorage = {
       token: undefined, 
       dataList: undefined, 
       userInfo: undefined
   };
   
  const initCallback = () => {

       // From now on, you can write or read the variables in RNStorage synchronously
       
       // equal to [ await AsyncStorage.setItem('token',TOKEN1343DN23IDD3PJ2DBF3==') ]
       RNStorage.token = 'TOKEN1343DN23IDD3PJ2DBF3=='; 
       
       // equal to [ await AsyncStorage.setItem('userInfo',JSON.stringify({ name:'rufeng', age:30})) ]
       RNStorage.userInfo = {name: 'rufeng', age: 30}; 

       // equal to [ await AsyncStorage.setItem('dataList',JSON.stringify([{ name:'rufeng', age:30},{ name:'rufeng', age:30}])) ]
       RNStorage.dataList = [{ name:'rufeng', age:30},{ name:'rufeng', age:30}]; 
  };
  
  XStorage.initStorage(RNStorage, AsyncStorage, initCallback);