我有一个相对简单的应用程序(我的第一个应用程序),该应用程序需要显示从GraphQL查询中检索到并存储在AsyncStorage中的信息。一切正常,直到您关闭数据/ Wifi连接并重新启动应用程序-它不会加载与网络打开时相同的本地数据。在物理或仿真的Android设备上都是一样。
除了用户最初设置其详细信息时,没有数据调用。该应用程序使用Expo&AWS Amplify的2.7.1版本构建。我在最后一个问题上浪费了几天的时间,并且在Expo SecureStore和Amplify Cache上得到了相同的行为,并且不愿走这样的学习之路,并在如此简单的应用程序中包含Redux ...
//import from react native not react
import { AsyncStorage } from 'react-native'
//calling a function as app loads
componentDidMount() {
this._loadInitialState();
}
//retrieving String from AsyncStorage
_loadInitialState = async () => {
try {
const policyNum = await AsyncStorage.getItem('policyNum')
//...
} catch {
//...
}
//setting state
if (policyNum != null && policyNum != undefined) {
this.setState({ policyNum: policyNum })
//...
}
//the original setting of the item
setPolicyDetails = async () => {
if (this.state.policyNum != null) {
const policyNumber = this.state.policyNum
this.state.policyNumSet = true
try {
await AsyncStorage.setItem('policyNum', policyNumber)
} catch (err) {
//...
}
}
}
答案 0 :(得分:0)
您严重使用了更改状态的事实。
执行此操作的地方:
response.close()
您应该使用setState()函数更改状态,如下所示:
auto outPutString = inputString
.Apply(Transformation1)
.Apply(Transformation2)
答案 1 :(得分:0)
您要存储字符串吗?异步存储只能存储字符串。尝试使用JSON.stringify和JSON.parse
_loadInitialState = async () => {
try {
var policyNum = await AsyncStorage.getItem('policyNum')
policyNum = JSON.parse(policyNum) // converting to original
//...
} catch {
//...
}
//setting state
if (policyNum != null && policyNum != undefined) {
this.setState({ policyNum: policyNum })
//...
}
//the original setting of the item
setPolicyDetails = async () => {
if (this.state.policyNum != null) {
const policyNumber = this.state.policyNum
this.setState({ policyNumSet: true })
try {
var policyNumberString = JSON.stringify(policyNumber)
await AsyncStorage.setItem('policyNum', policyNumberString) //converting to string
} catch (err) {
//...
}
}
}
答案 2 :(得分:0)
这与外部API冲突