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);
我正在尝试在我的异步存储中存储一组电子邮件地址。将其视为“最近使用的帐户”以加快在多个用户使用的设备上的登录速度
这是我目前所知道的 - 这在用户成功登录后被调用:
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);