这是我的App.js
,其他一切都是标准/简单,我可以得到它。
import React from 'react';
import { AsyncStorage, Text, View } from 'react-native';
export default class App extends React.Component {
render() {
console.log("Fetching data")
AsyncStorage.getItem('@MySuperStore:key', (value) => {
console.log("Fetched data: ", value)
if(value == null) {
console.log("Writing data!")
AsyncStorage.setItem('@MySuperStore:key', 'data', () => {
console.log("Wrote data!")
})
}
})
return(
<View>
<Text>Hello, ReplIt</Text>
</View>
);
}
}
提取的value
始终为null
。
我已经在本地和ReplIt尝试了这个。在所有情况下,数据不会在应用程序加载中持续存在;我总是看到:
Fetching data
Fetched data: null
Writing data!
Wrote data!
我做错了什么?关于Expo如何与持久存储进行交互,我是否有错误的假设? AFAIK,AsyncStorage
应该将东西保存到设备中;所以我可以关闭并重新打开应用程序并保持数据。
答案 0 :(得分:3)
UPD:我刚刚意识到您的代码按预期工作...可能是评论中提到的重复问题。
避免render
方法中的任何请求和异步调用,因为它可能会被调用,具体取决于道具或状态变化的方式。最好将所有相关代码放入componentDidMount
AsyncStorage
中。安装组件时只会调用一次。
不确定为什么你的代码dodnt为你工作,import React from "react";
import { AsyncStorage, Text, View } from "react-native";
export default class App extends React.Component {
constructor() {
super();
this.state = {
storedValue: null
};
}
async componentDidMount() {
let storedValue = await AsyncStorage.getItem("@MySuperStore:key");
console.log("Fetched data: ", storedValue);
if (storedValue == null) {
console.log("Writing data!");
storedValue = await AsyncStorage.setItem("@MySuperStore:key", "data");
}
this.setState({
storedValue
});
}
render() {
const { storedValue } = this.state;
return (
<View>
<Text>Hello, ReplIt</Text>
<Text>This is Stored Value, '{storedValue}'</Text>
</View>
);
}
}
允许回调,但等待对我来说没问题:
<div style="overflow:auto;height:200px">
<div (scroll)="scrollHandler($event)">Hello {{name}}</div>
.... Other content elements.
答案 1 :(得分:0)
尝试一下。 AsyncStorage是一种基于Javascript Promise的方法。
AsyncStorage.getItem('@MySuperStore:key')
.then(value => console.log(value))
或
value = await AsyncStorage.getItem('@MySuperStore:key');
console.log(value);