如何在异步存储中存储变量?
How to stored a variable in asyncstorage?
我目前正在学习 react-native。
我正在尝试将变量存储到 scriptone.js 中的 asyncstrorage 中并在 scripttwo.js
中调用它
但是我未能将变量存储在 scriptone.js
我在 scriptone.js 中导入的内容:
import React, { Component, BackAndroid } from "react";
import { AsyncStorage } from 'AsyncStorage';
import { View, Text, StyleSheet, Button, Image, TouchableOpacity, TextInput, Alert} from "react-native";
这是我在 scriptone.js
中的代码的一部分
class SettingScreen extends Component {
state = {
a: '70',
b: '',
c: '',
};
onPressButton = () => {
if (this.state.a == this.state.aa) {
this.setState({ b: this.state.a });
this.storeData();
}
else {
Alert("Try Again");
}
}
storeData(){
const {a} = this.state;
let mynum : a;
AsyncStorage.setItem('array',mynum)
Alert("Saved");
}
...
错误显示:
"undefined is not an object(evaluating '_AsyncStorage.AsyncStorage.setItem')
请问是什么问题?
谢谢。
异步存储
通常要使用 AsyncStorage,您首先将其导入到文件的顶部,文档说明您应该按如下方式导入它:
import { AsyncStorage } from 'react-native';
你可以在这里看到https://facebook.github.io/react-native/docs/asyncstorage
显然你应该删除 之前的导入语句
import { AsyncStorage } from 'AsyncStorage';
因为保留它会导致名称冲突。
保存到 AsyncStorage
保存到 AsyncStorage 是一项异步任务,因此您应该使用 async/await
函数,这意味着您应该更新 storeData()
函数。您可以查看文档 https://facebook.github.io/react-native/docs/asyncstorage 了解如何执行此操作。
storeData = async () => {
const {a} = this.state;
let mynum = a;
try {
await AsyncStorage.setItem('array', mynum)
Alert("Saved");
} catch (err) {
console.warn(err);
}
}
设置状态
接下来,当您设置状态时,您可能会陷入竞争状态。 setState 将项目设置为状态需要时间。所以当你打电话给
this.setState({ b: this.state.a });
您调用时可能尚未实际设置状态
this.storeData();
导致错误的值存储在 AsyncStorage 中。
要克服这个问题,有几种方法可以解决这个问题
- 将 setState 与回调一起使用
- 将要存储的变量作为参数传递给
this.storeData()
将 setState 与回调一起使用
这篇文章详细介绍了如何将 setState 与回调一起使用 https://medium.learnreact.com/setstate-takes-a-callback-1f71ad5d2296 但是您可以将 onPressButton
重构为类似这样的东西
onPressButton = () => {
if (this.state.a == this.state.aa) {
this.setState({ b: this.state.a }, async () => { await this.storeData(); });
} else {
Alert("Try Again");
}
}
这将保证在更新状态之前 this.storeData()
不会是 运行。
将要存储的变量作为参数传递
这需要重构 storeData()
函数以获取参数
storeData = async (mynum) => {
try {
await AsyncStorage.setItem('array',mynum)
Alert("Saved");
} catch (err) {
console.warn(err);
}
}
现在要使用此功能,我们必须更新您的 onPressButton
,请注意,我们将要存储的值传递给 storeData
,这意味着我们不再需要从内部状态访问它storeData
onPressButton = async () => {
if (this.state.a == this.state.aa) {
this.setState({ b: this.state.a });
await this.storeData(this.state.a);
} else {
Alert("Try Again");
}
}
正在从 AsyncStorage 中检索
这也是一个异步任务,需要 async/await
。要获取您存储的字符串,您只需将正确的密钥传递给 retrieveData
函数
retrieveData = async (key) => {
try {
const value = await AsyncStorage.getItem(key);
if (value !== null) {
// We have data!!
console.log(value);
// do something with the value
}
} catch (error) {
// Error retrieving data
}
}
我目前正在学习 react-native。
我正在尝试将变量存储到 scriptone.js 中的 asyncstrorage 中并在 scripttwo.js
中调用它但是我未能将变量存储在 scriptone.js
我在 scriptone.js 中导入的内容:
import React, { Component, BackAndroid } from "react";
import { AsyncStorage } from 'AsyncStorage';
import { View, Text, StyleSheet, Button, Image, TouchableOpacity, TextInput, Alert} from "react-native";
这是我在 scriptone.js
中的代码的一部分class SettingScreen extends Component {
state = {
a: '70',
b: '',
c: '',
};
onPressButton = () => {
if (this.state.a == this.state.aa) {
this.setState({ b: this.state.a });
this.storeData();
}
else {
Alert("Try Again");
}
}
storeData(){
const {a} = this.state;
let mynum : a;
AsyncStorage.setItem('array',mynum)
Alert("Saved");
}
...
错误显示:
"undefined is not an object(evaluating '_AsyncStorage.AsyncStorage.setItem')
请问是什么问题? 谢谢。
异步存储
通常要使用 AsyncStorage,您首先将其导入到文件的顶部,文档说明您应该按如下方式导入它:
import { AsyncStorage } from 'react-native';
你可以在这里看到https://facebook.github.io/react-native/docs/asyncstorage
显然你应该删除 之前的导入语句
import { AsyncStorage } from 'AsyncStorage';
因为保留它会导致名称冲突。
保存到 AsyncStorage
保存到 AsyncStorage 是一项异步任务,因此您应该使用 async/await
函数,这意味着您应该更新 storeData()
函数。您可以查看文档 https://facebook.github.io/react-native/docs/asyncstorage 了解如何执行此操作。
storeData = async () => {
const {a} = this.state;
let mynum = a;
try {
await AsyncStorage.setItem('array', mynum)
Alert("Saved");
} catch (err) {
console.warn(err);
}
}
设置状态
接下来,当您设置状态时,您可能会陷入竞争状态。 setState 将项目设置为状态需要时间。所以当你打电话给
this.setState({ b: this.state.a });
您调用时可能尚未实际设置状态
this.storeData();
导致错误的值存储在 AsyncStorage 中。
要克服这个问题,有几种方法可以解决这个问题
- 将 setState 与回调一起使用
- 将要存储的变量作为参数传递给
this.storeData()
将 setState 与回调一起使用
这篇文章详细介绍了如何将 setState 与回调一起使用 https://medium.learnreact.com/setstate-takes-a-callback-1f71ad5d2296 但是您可以将 onPressButton
重构为类似这样的东西
onPressButton = () => {
if (this.state.a == this.state.aa) {
this.setState({ b: this.state.a }, async () => { await this.storeData(); });
} else {
Alert("Try Again");
}
}
这将保证在更新状态之前 this.storeData()
不会是 运行。
将要存储的变量作为参数传递
这需要重构 storeData()
函数以获取参数
storeData = async (mynum) => {
try {
await AsyncStorage.setItem('array',mynum)
Alert("Saved");
} catch (err) {
console.warn(err);
}
}
现在要使用此功能,我们必须更新您的 onPressButton
,请注意,我们将要存储的值传递给 storeData
,这意味着我们不再需要从内部状态访问它storeData
onPressButton = async () => {
if (this.state.a == this.state.aa) {
this.setState({ b: this.state.a });
await this.storeData(this.state.a);
} else {
Alert("Try Again");
}
}
正在从 AsyncStorage 中检索
这也是一个异步任务,需要 async/await
。要获取您存储的字符串,您只需将正确的密钥传递给 retrieveData
函数
retrieveData = async (key) => {
try {
const value = await AsyncStorage.getItem(key);
if (value !== null) {
// We have data!!
console.log(value);
// do something with the value
}
} catch (error) {
// Error retrieving data
}
}